2016-12-25 52 views
0

我正在學習gcc選項DDEBUG。 下面是我的測試簡單的代碼:DDEBUG = 0不起作用

#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編譯,我希望「被定義調試標誌」將不被打印出來,但是它的作用。我可否知道爲什麼-DDEBUG=0不起作用?

+3

也許你混淆了'和'#if'#ifdef' –

回答

3

預處理器條件不起作用。當你定義DEBUG等於某個值(無所謂哪個),它仍然是定義爲這意味着#ifdef將是「真」。

要麼不界定在所有宏(這是「正常」的方式),或使用#if喜歡

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