C語言預處理實戰

  1. 頭文件件包含
    1.1 #include <> 和 #include"“的區別:<>專門用來包含系統提供的頭文件(就是系統自帶的,不是程序員自己寫的),”"用來包含自己寫的頭文件;更深層次來說:<>的話C語言編譯器只會到系統指定目錄(編譯器中配置的或者操作系統配置的尋找目錄,譬如在ubuntu中是/usr/include目錄,編譯器還允許用-I來附加指定其他的包含路徑)去尋找這個頭文件(隱含意思就是不會找當前目錄下),如果找不到就會提示這個頭文件不存在。
    1.2
    ““包含的頭文件,編譯器默認會先在當前目錄下尋找相應的頭文件,如果沒找到然後再到系統指定目錄去尋找,如果還沒找到則提示文件不存在。
    總結+注意:規則雖然允許用雙引號來包含系統指定目錄,但是一般的使用原則是:如果是系統指定的自帶的用<>,如果是自己寫的在當前目錄下放着用””,如果是自己寫的但是集中放在了一起專門存放頭文件的目錄下將來在編譯器中用-I參數來尋找,這種情況下用<>。
    1.3
    頭文件包含的真實含義就是:在#include<xx.h>的那一行,將xx.h這個頭文件的內容原地展開替換這一行#include語句。過程在預處理中進行。

  2. 註釋
    2.1 註釋是給人看的,不是給編譯器看的。
    2.2 編譯器既然不看註釋,那麼編譯時最好沒有註釋的。實際上在預處理階段,預處理器會拿掉程序中所有的註釋語句,到了編譯器編譯階段程序中其實已經沒有註釋了。

  3. 條件編譯
    3.1 有時候我們希望程序有多種配置,我們在源代碼編寫時寫好了各種配置的代碼,然後給個配置開關,在源代碼級別去修改配置開關來讓程序編譯出不同的效果。
    3.2 條件編譯中用的兩種條件判定方法分別是#ifdef 和 #if
    區別:#ifdef XXX判定條件成立與否時主要是看XXX這個符號在本語句之前有沒有被定義,只要定義了(我們可以直接#define XXX或者#define XXX 12或者#define XXX YYY)這個符號就是成立的。
    的格式是:#if (條件表達式),它的判定標準是()中的表達式是否爲true還是flase,跟C中的if語句有點像。
    用法1:
    #define NUM
    int main(void)
    {
    #ifdef NUM
    xxx
    #else
    yyy
    #endif
    }
    如果是NUM,那麼yyy是不參與編譯的。
    用法2:
    #define NUM 1
    int main(void)
    {
    #if (NUM==1)
    xxx
    #else
    yyy
    #endif

}

發佈了106 篇原創文章 · 獲贊 10 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章