C++调试打印宏OS X Clang兼容

C++ Debug Print macro OS X Clang compatible

本文关键字:Clang 兼容 OS 调试 打印 C++      更新时间:2023-10-16

我正在将一些C++代码移动到以前在Win VC++2012和Linux GCC 4.7上编译的OS X(Maverick)。我有以下宏可以在调试模式下将消息打印到控制台:

#ifdef DEBUG
  #define  PrintDebug(msg) Msg::PrintMsg msg
#else
  #define  PrintDebug(msg) (void)0
#endif

它起作用了,但在XCode中,编译器(clang)在表达式"和"后抛出错误,如"预期的";"提供了太多参数,无法像宏调用一样运行"

需要注意的是,宏参数的输入具有与相同的格式

printf(fmt,...) 

例如,仅将其与消息一起使用:

 PrintDebug("Some messagen");

引发编译时错误:"表达式"后应为";"

当我通过格式化时:

  PrintDebug("Number:%dn",someNumber);

错误是:为宏调用这样的函数提供了太多的参数

我尝试了这个SO线程的其他几种变体,但没有找到适用于所有3个编译器的匹配。如何使它既能与CLANG一起工作,又能与MSVC和GCC编译器兼容?

您可以为此使用可变宏:

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