#if #endif 在宏内[重复]
Posted
技术标签:
【中文标题】#if #endif 在宏内[重复]【英文标题】:#if #endif inside macro [duplicate] 【发布时间】: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.c
、gcc prog.c
都可以。
@BLUEPIXY 语法规范是 #if
constant-expression new-line ,所以这可能是 gcc 错误或 gcc 扩展. gcc 用它做什么?
【参考方案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
。以上是关于#if #endif 在宏内[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在宏内使用 Qt4 和 CMake 的 find_package 时出现问题