假设我有两个函数
void f1(int p1, int v1, ...);
和
void f2(int v1, ...);
在 f1 中,我想将可变参数列表中的所有参数传递给 f2:
void f1(int p1, int v1, ...) {
f2(/*pass all variadic parameters*/);
}
例如,当我调用 f1(1, 2, 3, 4, 5)
时,我想将 2,3,4,5 传递给 f2
最佳答案
尽管您已经接受了正确答案。
如果您无权访问 f2
,另一种方法是使用可变参数宏。这是自 C99 以来可用的东西:
#define F1(P1, V1, ...) \
do { \
/* do something with P1, V1 */ \
f2(__VA_ARGS__); \
} while(0)
这里的 do
-while
只是封装您的语句的一个技巧,这样对该宏的调用可以出现在普通语句和所有 的任何地方\
帮助在多行上编写宏。
此类宏非常常用于增强 printf
以打印带有前缀的日志消息,例如:
#define dprintf(...) \
do { \
fprintf(stderr, "%lX: ", (long unsigned)mynum); \
fprintf(stderr, __VA_ARGS__); \
} while(0)
关于iphone - 可变列表参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5283378/