如何解决使用 __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__)
有什么办法吗?
解决方法
在这种情况下,可变参数包是您的朋友:
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__)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。