1)定義常量與命令
避免幻數
定義巨集時,避免以__開頭,以防與內建巨集定義衝突。
巨集和列舉的區別
a.列舉常量是實體常量中的一種,但巨集不是實體
b.列舉常量屬於常量,但巨集不是常量
c.列舉常量具有型別,但巨集沒有型別。列舉型別主要用於限制性輸入,巨集只是預處理替換符
d.列舉只可以表示整型,巨集可以定義所有。
2.巨集函式(函式式巨集定義)
#define
#define max(a,b) a+b
int main()
自定義函式和巨集函式的區別
a.函式式巨集定義的引數沒有型別,預處理時只做形式上的替換,而不做引數型別檢查,所以傳參時要小心。
b.巨集函式不安全,複雜的函式難以實現。
c.巨集函式省去了分配,提高了執行效率
巨集函式用編譯時間換記憶體空間,即(用時間換空間)
inline:內斂函式,用空間換時間
3.內建巨集函式
func(顯示函式名)
line(顯示行號)
time(顯示時間)
date(顯示時間)
4.條件編譯指令
1)#if、/#endif、/#else、/#elif指令
2)#ifdef,#ifndef的作用:防止標頭檔案重複包含帶來的重複定義
#ifndef funca_h
#define funca_h
//標頭檔案內容
#endif
編譯預處理
所謂編譯預處理,就是在c源程式的編譯之前,由編譯預處理程式對這些編譯預處理命令進行處理的過程。最常見的就是常量的替換。編譯預處理按功能可以分為巨集定義,檔案包含和條件編譯三類。編譯預處理命令以 開頭,下面進行詳細說明 一.巨集定義與符號常量 1.無參巨集定義 define 識別符號 字串 1 巨集名...
編譯預處理
1.巨集定義指令 1 定義變數與命令 避免幻數 在巨集定義命名時,盡量能清楚的表明功能,大寫 不能以 開頭易與內建巨集衝突 2 定義巨集函式 define max a,b a b a b int num max 6,5 6 5 6 5 用編譯時間換記憶體空間的是巨集函式 用記憶體空間換執行空間的是內...
編譯預處理
我們知道在編譯過程中的預處理階段會進行標頭檔案展開,巨集替換以及條件編譯。1.標頭檔案展開 首先是標頭檔案展開,標頭檔案的前面都有 符號,其實是理指令。理指令是以 號開頭的 行。號必須是該行除了任何空白字元外的第乙個字元。後是指令關鍵字,在關鍵字和 號 之間允許存在任意個數的空白字元。整行語句構成了...