1. 程式人生 > >Linuxc基礎 二十四

Linuxc基礎 二十四

巨集定義

定義巨集之後編譯器會在預編譯的時候用真身替換替身。
在用字串巨集常量時因為路徑太長,一行寫下來比較彆扭時,用反斜槓接續符。
用巨集定義表示式時要注意:函式巨集被呼叫時是以實參代換形參,而不是“值傳遞”。
1、c的巨集只能擴充套件為用大括號括起來的初始化、常量、小括號括起來的表示式、型別限定符、儲存類識別符號或do-while-zero結構(儘量少用此結構)。
2、函式巨集的呼叫不能缺少引數,如果此函式巨集有引數的話。
3、傳遞函式巨集的引數不能包含看似預處理指令的標記。
4、在定義函式巨集時,每個引數例項都應該以小括號括起來,除非他們作為#或##的運算元。
5、defined預處理操作符只能使用兩種標準形式之一。
defined預處理操作符的兩種可允許的形式為:

defined(identifider)
defined identifier

#undef是用來撤銷巨集定義的。
1、巨集不能在塊中進行#define和#undef
2、不要使用#undef
3、儘量使用普通的函式,而不要使用“巨集定義函式”。
4、預處理指令中所有巨集識別符號在使用前都應該先定義,除了#ifdef和#ifndef指令及defined()操作符。

條件編譯

條件編譯有3種形式:
1、

#ifdef識別符號
程式段1
#else
程式段2
#endif

功能是:如果識別符號已被#define命令定義過,則對程式段1進行編譯否則對程式段2進行編譯。
2、

#ifndef識別符號
程式段1
#else
程式段2
#endif

功能是:如果識別符號未被#define命令定義過,則對程式段1進行編譯否則對程式段2進行編譯。
3、

#if常量表達式
程式段1
#else
程式段2
#endif

功能是:如果常量表達式的值為真(非0),則對程式段1進行編譯否則對程式段2進行編譯。
所有的#else、#elif和#endif預處理指令應該同與他們相關的#if或#ifdef指令放在相同的檔案中。
檔案包含:
1、格式1:

#include<filename>

2、格式2:

#incude“filename”

#error預處理:
作用是:編譯程式時,只要遇到#error就會生成一個編譯錯誤提示訊息,並停止編譯。

#error error -message

注意:巨集串error -message不用雙引號包圍。
#pragma message
message引數:他能夠在編譯資訊輸出視窗中輸出相應的資訊。

#pragma message(“訊息文字”)

”##“運算子

在單一的巨集定義中,最多可以出現一次“#”或“##”前處理器操作符。