假设我有 2 个函数
void f1(int p1, int v1, ...);
AND
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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)