DDEBUG = 0不起作用

时间:2016-12-25 09:34:41

标签: c debugging gcc c-preprocessor

我正在学习gcc选项DDEBUG。 下面是我的简单测试代码:

#include <stdio.h>
#include <stdlib.h>


#ifdef DEBUG
    #define debug(msg) printf("Debug: %s\n", msg)
#else
    #define debug(msg)
#endif

int main(int argc, char const *argv[])
{

    debug("Debug flag was defined\n");

    printf("hello world\n");
    return 0;
}

然后,我使用gcc -DDEBUG=0 debug.c编译,我希望&#34;调试标志已定义&#34;不会打印,但确实如此。我可以知道为什么-DDEBUG=0不起作用吗?

1 个答案:

答案 0 :(得分:3)

预处理器条件不起作用。当您将DEBUG定义为等于某个值(无关紧要)时,它仍然是已定义,这意味着#ifdef将为“true”。

要么根本不定义宏(这是“正常”方式),要么使用#if之类的

#if DEBUG != 0
    #define debug(msg) printf("Debug: %s\n", msg)
#else
    #define debug(msg)
#endif