2011-07-14 140 views
4

這可能是一個非常愚蠢的問題,但是如何在代碼中打開這些調試消息?C:`打開調試消息

#ifdef DEBUG_MSG 
    printf("initial state : %d\n", initial_state); 
#endif 

提前許多感謝,

+0

您需要#define DEBUG_MSG。你的編譯器是什麼? –

+2

有沒有愚蠢的問題。那麼,有,但是這不是其中之一:-) – paxdiablo

+0

英特爾icc是編譯器 – Eamorr

回答

4

#ifdef意思是「如果定義」,你的代碼本質上是告訴預處理器,以檢查是否DEBUG_MSG定義別的地方。如果是,它將包含您顯示的代碼。

+0

是的,我所要做的就是設置'#define DEBUG_MSG 1' ...你可以告訴我是C noob – Eamorr

+0

實際上,你可以省略'1',你需要的只是宏的定義。擴張本身並不重要。 – David

9

編譯時,嘗試這樣的事:

$ gcc -DDEBUG_MSG -o foo foo.c 
+2

+1,因爲這意味着不必修改代碼本身來添加'#define'。 –

1

#ifdef會讓你的宏只有DEBUG_MSG定義進行擴展。你可以用兩種方法來做到這一點。在源要麼做一個#define DEBUG_MSG 1或使用-DDEBUG_MSG編譯(如果使用gcc,還有其他的編譯器太相似的標識)

8

你將不得不#define,不知怎的。

0。在你的代碼。

直接在你的代碼中使用該標誌在什麼地方:

#define DEBUG_MSG 

1.在命令行。

對於每一個的資源文件,或者適當地在你的makefile:

gcc -DDEBUG_MSG main.c 

(海合會,標誌是-D<macro-name>,對於MSVC,它是/D,對ICC是前者的一個,這取決於您的操作系統。)

2.在你的IDE,某處。

在IDE的項目設置,找到在那裏你可以把定義。引擎蓋下,這是通過使用1

+0

我很想爲這個答案投票,但問題被標記爲[c],並且您已經使用了'g ++'。 – JeremyP

+0

到底什麼是最完整的答案,所以我糾正了編譯器並投了票。 – JeremyP

+0

哈哈,謝謝,請原諒我的錯誤。 –

2

C預處理器階段,如果符號被定義將僅通過一個#ifdef/#endif內部代碼編譯器相完成。

您可以在通常(至少)兩種方式做到這一點。

第一種方法是使用命令行開關,用於編譯器,例如:

gcc -DDEBUG_MSG myprog.c 

-D意味着以限定預處理器符號跟隨它,雖然這是特定於實現的,許多編譯器使用相同的開關)。第二個是將這樣一行:

#define DEBUG_MSG 

你實際的源代碼的某個地方#ifdef前內。

前者通常是首選,因爲它允許您在不更改源代碼的情況下控制該行爲,以便例如可以從相同的源代碼生成調試和發佈版本。