【问题标题】:#if #endif inside macro [duplicate]#if #endif 在宏内[重复]
【发布时间】:2014-11-05 21:18:46
【问题描述】:

在我的代码中,我使用了很多表达式,例如:

#if DEBUG
    printf("Some text = %d", param);
#endif

我想知道是否可以将其更改为宏,例如:

DEBUG("Some text = %d", param); 

或至少:

DEBUG("Some text =", param);

?

【问题讨论】:

  • #if 本身是非法的,你的意思是#ifdef FOO 还是什么
  • @MattMcNabb 我解决了我的问题。
  • @SpencerGrantDoak 很好的答案。
  • @MattMcNabb 不一定是非法的。例如gcc -DDEBUG prog.cgcc prog.c 都可以。
  • @BLUEPIXY 语法规范是 #if constant-expression new-line ,所以这可能是 gcc 错误或 gcc 扩展. gcc 用它做什么?

标签: c macros


【解决方案1】:
#ifdef DEBUG
    #define DPRINTF(...) printf(__VA_ARGS__)
#else
    #define DPRINTF(...)
#endif

这样够好吗?

【讨论】:

  • 你确定这应该有效吗? ideone.com/JfgTMc
  • 日志功能宏是DPRINTF()DEBUG 只是控制#ifdef 条件的常量。
  • @python 再次阅读:我调用了宏DPRINTF(),因为DEBUG 通常启用/禁用调试模式(如在您的 sn-p 中)。当然你可以改变它。
  • @Quentin:我仍然不确定如何使用它。我试过了:#ifdef DEBUG 1 ...,但这并没有打印任何东西。抱歉这个愚蠢的问题,但我以前从未使用过如此复杂的宏。
  • @python 是的,你可以,只是在某个地方#define DEBUG /* whatever, or nothing */,并确保它在每个DPRINTF() 调用中都是可见的。将其注释掉以禁用调试。您还可以更改#ifdef 条件以专门检查true
猜你喜欢
  • 1970-01-01
  • 2022-11-29
  • 2017-08-09
  • 1970-01-01
  • 2017-07-12
  • 2010-10-08
  • 2013-09-20
  • 1970-01-01
  • 2010-11-12
相关资源
最近更新 更多