上篇文章中主要介紹了#define的用法,本文介紹幾個它的“近親”。
1、#undef
C語言不允許對同1個宏名稱重復定義,比以下面的寫法編譯時會報錯:
2、#ifdef #ifndef #else #endif
先擺代碼:
看名字就可以猜到這是啥意思,#ifdef 是指如果某個宏名被定義了,那末履行該命令和#endif或#else之間的代碼;而#ifndef恰好相反,如果某個宏名沒被定義,那末履行它和#endif或#else之間的代碼。這些中間的代碼既可以是預處理命令,還可以是普通代碼。如:
#ifdef #else 格式非常類似于C中 的if else 。主要差異為預處理器不能辨認標記代碼塊的花括號 {} ,因此使用#else (如果需要)和#endif (必須存在)來標記指令塊。這些條件結構可以嵌套。
1般地,當某文件包括幾個頭文件,而且每一個頭文件都可能定義了相同的宏肘,使用#ifndef可以避免對該宏重復定義。此時,第1個頭文件中的定義變成有效定義,而其他頭文件中的定義則被疏忽。為何會屢次包括同1文件呢?最多見的緣由是許多包括文件本身包括了其他文件,因此可能顯式地包括其他文件己經包括的文件。為何這會成為問題呢?由于頭文件中的有些語句在-個文件中只能出現1次(如結構類型的聲明)。標準C頭文件使用#ifndef技術來避免屢次包括。
3、#if 和#elif 指令
它們更接近常規的 C中的 if和else,后跟常量整數表達式。如果表達式為非零值,則表達式為真。在該表達式中可使用 C的關系運算符和邏輯運算符。
許多新的實現提供另外一種方法來判斷-個名字是不是已定義。不需使用:
#ifdef VAX
而是采取下面的情勢:
#if defined (VAX)
這里, defined 是1個預處理器運算符,如 果defined 的 參數已用#define 定義過 , 那末defined 返回1 ,否則返回 0。這類新方法的優點在于它可以和#elif1起使用。
4、#error #line #progma
以后補充,用的太少了。