C++调试打印宏OS X Clang兼容
C++ Debug Print macro OS X Clang compatible
我正在将一些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
相关文章:
- 奇怪的结构&GCC&clang(void*返回类型)
- 数据成员SFINAE的C++17测试:gcc vs clang
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- Clang bug?使用指针作为模板参数
- clang整洁10忽略了我的NOLINT命令
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 在clang++预处理器中确定gcc工具链版本
- 为什么 Clang 不允许"and"作为函数名称?
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 带有 -stdlib=libc++ 的 clang++ 9.0.1 找不到<optional>
- clang格式:宏的缩进
- CLANG 编译器 说:变量"PTR"可能未初始化
- clang格式:禁用排序包含
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么Clang报告与不兼容的类型相同
- 我可以用clang生成与旧版本的llvm兼容的llvm IR吗
- C++调试打印宏OS X Clang兼容
- clang错误:非常量左值引用无法绑定到不兼容的临时