預編譯處理 C語言中的巨集以其和函式的區別

2021-08-09 02:03:12 字數 951 閱讀 3715

巨集是一種預處理指令,可以通過#define定義。

c語言中的巨集可以分為有引數巨集和無引數巨集兩類。

1.無引數巨集(也是我們最常用的一類巨集)

a.形式為:#define   識別符號    巨集體

(eg:#define x 100      其功能是指定識別符號 x 來代替100. 這種替換主要目的是為使用者在程式設計時提供一定的方便,並能在一定程度上提高程式的執行效率。  )

2.有引數巨集

a.形式為:#define  巨集名(形參表)  巨集體 (形參表包括乙個或多個形參,每個形參之間使用逗號分隔)

示例如下:

**段circle(radius,clong,area)被展開成如下形式:

clong = 2*3.1415926*radius;area=3.1415926*radius*radius;

通過上述**,我們可以看到有參巨集在使用時和函式十分相似,但他們之間還是有一定區別的。

他兩的區別主要如下:

1.在呼叫函式時,先將呼叫函式的位址放入堆疊,函式執行完後再將呼叫函式的位址從堆疊返回給程式,最後回到原呼叫點。    而巨集展開是使用取代標識直接將巨集名取代。

2.展開有參巨集時,直接將實參置換形參。而在呼叫有參函式時,先將實參的值複製乙份,然後再將複製的值傳給形參。

3.在有參巨集中,形參是沒有型別的,因此實參可以是任何型別。但在有參函式中,形參是有型別的,因此實參的型別必須與形參保持一致。

巨集的使用說明如下:

1.不允許在巨集定義行尾加分號。負則巨集展開時會將分號作為巨集體的乙個字元,用於替換巨集名。

2.在巨集體中如果使用字串運算子(#),展開時該運算子作用的元素將被轉換為使用引號括起來的字串,同時與其前面的字串連線。

3.巨集名的有效範圍是從定義命令之後,到當前檔案結束。

4.進行巨集定義時。可以引用已存在的巨集名。

5.當巨集定義在一行中書寫不完時應該在下一行繼續時,應在最後乙個字元後加反斜槓「\」

c語言中預編譯

預編譯又被稱為預處理,是做 文字的替換工作。處理 開頭的指令。就是為編譯做預備工作的準備。常見的預編譯指令有三種 1 include指令 該指令指示編輯器將 檔案的全部內容插入此處,如果使用 代表在系統指定目錄下搜尋檔案,使用 代表現在當前目錄下搜尋檔案,然後在系統預設目錄下搜尋。2 define指...

C語言預編譯 巨集的整理

define null 0 define null null pointer 0 上面的重定義是相同的,但下面的重定義不同 如果多次定義時,再次定義的巨集內容是不同的,gcc會給出 name redefined 警告資訊.應該避免重新定義函式巨集,不管是在預處理命令中還是c語句中,最好對某個物件只有...

c語言中條件編譯相關的預編譯指令

條件編譯是根據實際定義巨集 某類條件 進行 靜態編譯的手段。可根據表示式的值或某個特定巨集是否被定義來確定編譯條件。最常見的條件編譯是防止重複包含標頭檔案的巨集,形式跟下面 類似 1 ifndef abcd h 2 define abcd h34 some declaration codes56 e...