4.預處理命令

概述

對一個源文件進行編譯時 系統先要自動引用預處理程序對源程序中的預處理命令做相應的處理 處理後自動地進入源程序進行編譯

它分爲 宏定義 文件包含  條件編譯

宏定義及其分類

不帶參數的宏定義  字符串

一般形式  #define 標識符 字符串  用一個指定的標識符來表示一個字符串 

字符串可以是常數、表達式、格式串等

宏定義的嵌套 可以直接引用已定義的宏名

如果要提前終止其作用域 可以使用#undef 標識符

帶參數的宏定義

一般形式  #define 宏名 (參數表) 字符串  注意宏名和形參表之間不能有空格出現

帶參數的宏定義與函數的區別在於:

1.函數的調用爲形參分配內存空間,而宏的展開和參數置換等都在程序編譯前進行,在展開式只是替換,並無內存空間的分配。

2.函數的形參與實參之間是值傳遞,而宏定義中參數的置換時預處理的替換過程中,並不存在所謂的參數的傳遞。

3.函數調用有返回值,宏定義沒有返回值。

4.函數中,形參和實參的類型要一致。但宏並不存在類型問題,宏名無類型,參數無類型,展開時只是帶入指定的字符串,宏定義時,字符串可以是任何類型的數據。

5.宏替換不佔用程序的運行時間,只佔用編譯時間;而函數的調用要佔用程序運行的時間。

並非任何情況下帶參數的宏定義都可以等效於函數調用  因爲其實現的原理存在本質的差異

 文件包含

1.文件包含順尋有講究:後包含的文件可以使用先包含的文件的內容。

2.允許包含的嵌套:在一個被包含的文件中也可以包含其它文件。

3省略外部變量聲明extern:應用文件包含可使一個文件中定義的外部變量(全局變量)被多個文件共同使用的,在其他文件中不需要對應用外部變量做extern聲明。

條件編譯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章