gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:52:43 27 4
gpt4 key购买 nike

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

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

它有效,但在 XCode 中,编译器 (clang) 会吐出像 "expected ';' 这样的错误在表达式“”和“提供了太多参数以实现宏调用之类的功能”之后

重要的是要注意,宏参数的输入与

的格式相同
printf(fmt,...) 

例如仅与消息一起使用:

 PrintDebug("Some message\n");

抛出编译时错误:“预期';'表达后"

当我通过格式化时:

  PrintDebug("Number:%d\n",someNumber);

错误是:提供了太多的参数来像宏调用一样运行

我尝试了 this SO thread 的其他几种变体但没有找到适用于所有 3 个编译器的匹配项。如何让它与 CLANG 一起工作,同时又与 MSVC 和 GCC 编译器兼容?

最佳答案

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

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

关于C++ 调试打印宏 OS X Clang 兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25720781/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com