微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 __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 举报,一经查实,本站将立刻删除。