C語言的預處理

2021-07-14 10:58:40 字數 1365 閱讀 7137

1、過程:1>標頭檔案展開    2>巨集替換    3>條件編譯

注:在程式中凡是有#開頭的都屬於預處理階段

2、<>與「 」的區別

系統的頭檔案目錄為:/usr/include,<>的含義為指定標頭檔案的搜尋路徑為系統的頭檔案目錄:/usr/include,而「 」是在當前的目錄找,找不到再去系統的標頭檔案中找。

一般來說,自己寫的標頭檔案用「 」,系統的標頭檔案用<>

3、巨集定義:

1、如int a[3],當中的3為幻數,因為可讀性差,要杜絕幻術可以使用巨集定義:#define max_size 3。

2、使用巨集定義的注意事項:

1>巨集定義無分號    2>巨集定義要體現它的意義    3>巨集定義要大寫    4>巨集定義不要以雙下劃線開頭(不與系統的巨集衝突)

3、巨集函式:

例:#define max(a,b) a > b ? a : b

int max = max(5 * 3,6 + 7);

這樣替換的結果可能會出錯,可以這樣

#define max(a,b) (a) > (b) ? (a) : (b)

4、定義函式和巨集函式的區別

1>巨集定義在預處理階段就完成,而函式需要經歷四個階段

2>巨集定義不分配記憶體空間,定義函式需要分配記憶體空間

3>巨集定義製作傻瓜式替換,而自定義比較複雜

4>

5、什麼時候用巨集函式什麼時候用自定義函式

簡短而且頻率頻繁呼叫的函式用巨集函式

6、編譯時間、執行時間

巨集函式編譯時間長:以編譯時間換記憶體空間

一記憶體空間換執行時間的例子:內嵌函式

inline int main(int a)

如果max呼叫連續四次,inline會把實踐部分載入到函式呼叫處,占用了記憶體空間,但提高執行時間。(c99標準)

7、巨集的使用技巧:

1>printf("%d\n",__line__);    列印行號

2>printf("%s:%d\n",__func__,__line__);

列印所在行號並且列印其所在函式,此函式可用來除錯段錯誤。

3>其他系統巨集:__time__:顯示時間 __date__:顯示日期

8、條件編譯

1、例子:

int main()

注釋:#if 0

#endif

2、如果a.h中有func1.h且裡面定義了a = 5;func1.h中有a.h且定義的吧= 5;那麼在mian中引用a.h與fun1.c標頭檔案展開時會出現重複定義

如果在fun1.h中加:

#ifdef a_h

#define a_h

int a = 5;

#endif

加了的作用是放置標頭檔案重複包含帶來的重複定義

C語言預處理

c語言中編譯預處理的三種形式的命令 巨集定義,檔案包含,條件編譯命令。1 巨集定義主要是 define,undef 如下 define pi 3.1415926 不帶引數的巨集定義 define max a,b a b?a b 帶引數的巨集定義 說明 巨集定義在c語言與c 語言中是相通的。下面舉例說...

C語言預處理

預處理 系統自動自動呼叫預處理程式對程式中 號開頭的預處理部分進行處理,處理完畢後可以進城源程式的編譯階段。預定義 一些預定義符號 常用於除錯 file 正在預編譯的源檔名 line 當前行號 只有這個是整數常量,其他是字串常量 function 當前所在函式名 date 當前日期 time 當前時...

c語言預處理

預處理可以包含 1 巨集定義指令 2 標頭檔案包括指令 3 條件編譯指令 4 編譯程式可以識別的特殊符號 巨集定義 define undef 檔案包含 include 條件編譯 if ifdef else elif endif等 其他 line error program等 注意事項 1 在c語言中...