C ++ Debug Print宏OS X Clang兼容

时间:2014-09-08 09:11:35

标签: c++ macos clang

我正在将一些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编译器兼容?

1 个答案:

答案 0 :(得分:0)

您可以为此使用可变参数宏:

#ifdef DEBUG
  #define  PrintDebug(fmt, args...) Msg::PrintMsg (fmt, args)
#else
  #define  PrintDebug(fmt, args...) (void)0
#endif