第14章,預(yù)處理器

什么是預(yù)處理?

預(yù)定義符號

#define ?指令

#define 指令定義的內(nèi)容。如果在文本中有出現(xiàn),就會簡單直接替換成原有的內(nèi)容。

1、宏

#define替換

宏參數(shù)和#define定義可以包含其他#define定義的符號。但是宏不可以出現(xiàn)遞歸。

宏與函數(shù)

較小的邏輯處理可以使用宏來實現(xiàn),因為函數(shù)的話會導(dǎo)致程序的規(guī)模和速度處于劣勢;

另外宏是與類型無關(guān)的,沒有限制參數(shù)類型的;

相比較于函數(shù),宏的缺點是每處使用宏時,一份宏定義代碼的拷貝都將插入到程序中,除非宏定義很短,否則這樣反而會更加程序的長度。

帶副作用的宏參數(shù)

副作用就是在表達式求值時出現(xiàn)的永久性效果。

例如:

命名約定

宏和函數(shù)存在一些不同的地方,#define定義出的符號也和真正的變量有所不同。以示區(qū)別,我們常把宏名字和define符號大寫。

#undef

命令行定義

-Dname ? ,就聲明了name這個宏,其值默認為1,當然默認值也會根據(jù)不同的編譯器有所不同;

-Dname=stuff,聲明了name這個宏,并時期值為stuff這個值;

提供符號命令行定義的編譯器通常也提供在命令行中去除符號的定義,在UNIX編譯器上,用-U可以執(zhí)行這個任務(wù),-Uname就可以把name這個宏給去掉。當這個任務(wù)和條件編譯結(jié)合使用時,這個特性會很有用的。

條件編譯

是否被定義

嵌套指令

文件包含

一般庫文件包含用 #include 然后本地文件包含用#include "filename"

文件包含如果不適用絕對路徑,就會去相應(yīng)默認那幾個位置去查找;

在一個將被其他文件包含的文件中使用#include指令是可能的。這樣包含了這個文件的源文件也會自動包含另一個inlcude文件。標準要求編譯器支持至少8層的頭文件嵌套,但我們應(yīng)該記住盡量不要包含太深。另外這種也會導(dǎo)致多重包含,雖然一般沒什么問題,但諸如make這樣的工具在使用時必須明確文件相互之間的依賴關(guān)系,我們解決的辦法是使用條件編譯這種方法來避免一個頭文件被多次包含,使其只包含一次。(詳情看C&POINTER290)

其他指令

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容