#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.cgcc 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 时出现问题

PCH警告:标题停止不能在宏或#if块中[重复]

C语言头文件为什么要加#ifndef #define #endif(防止头文件重复包含)

Oracle - IF 子句中的子查询 [重复]

#ifndef#define#endif防止头文件重复包含

数组中重复出现的数字