C和指標14章 預處理器筆記

2021-08-07 20:12:59 字數 1459 閱讀 4528

1.#define

#define name stuff

當有name出現時,預處理器就會把它替換成stuff

當stuff非常長的時候,可以分成好幾行,除了最後一行外,每行都要加上乙個反斜槓

#define debug_print printf( "file %s  line %d :\

"x=%d, y = %d, z = %d",\

__file__, __line__,\

x,y,z)

當我們在程式裡邊使用debug時,後邊就要新增分號,而定義define那裡就不需要分號

2.巨集就是說可以將引數替換到文字中,,這種實現通常稱為巨集或者巨集定義

巨集的宣告方式

#define name(parameter-list) stuff// 這裡左括號必須和name緊鄰,不然會被認為是stuff一部分,當巨集被呼叫時,名字後面是由逗號分隔的值的列表,每個與定義時的相對應,使用括號包圍,即每個引數對應的實際值都將被替換到stuff中

舉個例子

#define square(x) x*x

square(5)

然後預處理器就用5*5代替】

2.2巨集是不可以出現遞迴

2.3巨集與函式

巨集非常頻繁地用於簡單計算,比如在兩個表示式中尋找其中較大或者較小的乙個

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

2.4帶***的巨集引數

當巨集引數在巨集定義中出現超過一次時,函式可能會有***,比如上邊那個換成a++,b++

2.6#undef

用於移除乙個巨集定義

#undef name

想要在現存的名字重新定義,舊定義必須使用#undef移除

14.3條件編譯

使得某條語句或者某組語句進行翻譯或者被忽略

語法形式:

#if constant-expression//這個常量表示式由預處理器進行求值;如果值是非0,statements正常編譯,否則,預處理就刪除他們

statements

#endif

#define debug 1

if debug

printf( "x=%d, y=%d\n", x,y);

#endif

如果要忽略他就直接把符號定義為0;

#if還可以具有可以選的#elif 和#else子句

#if constant-expression

statements

#elif constant-expression//出現次數不限

other statements

#else

other statements

#endif

14.4檔案包含

14.4.1 函式庫檔案包含

#include //以.h結尾

14.4.2本地檔案包含

#include "filename"

《C和指標》第14章 預處理器

14.2.1 巨集 define包括乙個規定,允許把引數替換到文字中,這種實現通常稱為巨集 macro define square x x x 則程式中的square 5 會被替換成 5 5 警告 例1 a 5 printf d n square a 1 會被替換成5 1 5 1,列印結果是11,不...

C和指標(第14章 預處理器)

程式編寫,編譯第一步就是巨集的宣告,也稱預處理器階段,在編譯之前,有刪除注釋,插入被 include指令包含的檔案的內容 和 define所替換的符號等。14.1 五種預處理符號 file name.c 進行編譯的源檔名 line 25 檔案當前的行號 date jan 14 2019 檔案被編譯的...

C和指標 學習筆記 第14章 預處理器

c預處理器在源 編譯之前對其進行一些文字性質的操作。它的主要任務包括刪除注釋 插入被 include指令包含的檔案的內容 定義和替換由 define指令定義的符號以及確定 的部分內容是否應該根據一些條件編譯指令進行編譯。1.預定義符號 預處理器定義的符號,它們的值或者是字串常量,或者是十進位制數字常...