簡體   English   中英

C上的預處理器

[英]Preprocessor on C

我在代碼中添加了這個:

#ifdef DEBUG_MODE
    printf("i=%d\n",i);
    fflush(stdout);
#endif

我的問題是,如果我不在DEBUG_MODE ,編譯器在編譯時會做什么?

編譯器將不執行任何操作,因為未定義DEBUG_MODE時將不執行任何操作。

#ifdef#endif控制條件編譯。 這發生在程序的初次傳遞過程中,在編譯器甚至開始考慮文件專門包含C代碼之前進行了愚蠢的文本替換。 在這種情況下,如果沒有定義符號,則僅留空格。 如果當時未定義要測試的預處理器定義,則文本甚至不會被分類為C標記。

您可以親眼看到這一點:只需使用編譯器在預處理后用於停止的任何標志(例如gcc -E x.cc來調用編譯器,然后在輸出中只有一兩行是空的。 這也是理解宏的一項非常重要的技術,當您無法猜測為什么某個程序無法按預期方式工作時,這是一件好事-編譯器說某些類或函數不存在,並且您已經包含了它的標頭-查看預處理后的輸出,以了解編譯器真正處理的是什么。

如果DEBUG_MODE則不會編譯其下的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM