以下宏有效:
#define DEBUG(msg, ...) printf(msg, __VA_ARGS__)
但当我添加自己的函数时,它显示error: '__VA_ARGS__' was not declared in this scope
。我的代码:
void Debug(const char* msg, ...) {
printf(msg, __VA_ARGS__);
}
#define DEBUG(msg, ...) Debug(msg, __VA_ARGS__)
有什么办法吗?
Variadic参数包在这种情况下是您的朋友:
template< typename ... Args >
void Debug( const char * msg, Args ... args ) {
printf( msg, args ... );
}
__VA_ARGS__
根本不存在于可变宏之外。对于您正在尝试的内容,请使用vprintf()
而不是printf()
,例如:
void Debug(const char* msg, ...) {
va_list args;
va_start(args, msg);
vprintf(msg, args);
va_end(args);
}
#define DEBUG(msg, ...) Debug(msg, __VA_ARGS__)