我正在将一些C ++代码移动到OS X(Maverick),以前在Win VC ++ 2012和Linux GCC 4.7上编译。我有以下宏来在调试模式下将消息打印到控制台:
#ifdef DEBUG
#define PrintDebug(msg) Msg::PrintMsg msg
#else
#define PrintDebug(msg) (void)0
#endif
它有效,但在XCode中,编译器(clang)会发出错误,如“expected';'在表达“和”之后,为宏调用提供了太多的参数“
需要注意的是,宏参数的输入格式与
相同printf(fmt,...)
例如,仅将其与消息一起使用:
PrintDebug("Some message\n");
抛出编译时错误:“expected';'表达后“
当我通过格式化时:
PrintDebug("Number:%d\n",someNumber);
错误是:为宏调用提供了太多的参数
我尝试了this SO thread的其他几个版本,但未找到适用于所有3个编译器的匹配项。 如何使用CLANG并与MSVC和GCC编译器兼容?
答案 0 :(得分:0)
您可以为此使用可变参数宏:
#ifdef DEBUG
#define PrintDebug(fmt, args...) Msg::PrintMsg (fmt, args)
#else
#define PrintDebug(fmt, args...) (void)0
#endif