使用__VA_ARGS__调用printf不在函数中工作,但在宏中工作



以下宏有效:

#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__)

最新更新