我正在学习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编译,我希望“Debug flag was defined”不会被打印,但是它会被打印。我能知道为什么-DDEBUG=0不起作用吗?

最佳答案

预处理器条件不是这样工作的。当您将DEBUG定义为等于某个值(不管是哪个值)时,它仍然被定义,这意味着#ifdef将是“true”。
要么根本不定义宏(这是“正常”的方式),要么使用

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

关于c - DDEBUG = 0无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41320050/

10-15 01:05