预处理器
預(yù)處理器的行為就是由預(yù)處理指令(由#字符開頭的一些命令)控制的。 即#define和#include
#define指令定義了一個(gè)宏——用來代表其它東西的一個(gè)名字,如常量或常用的表達(dá)式。
#include指令告訴預(yù)處理器打開一個(gè)特定的文件,將它的內(nèi)容作為正在編譯的文件的一部分“包含”進(jìn)來。
C程序處理流程:
C程序—>預(yù)處理器—>修改后的C程序—>編譯器—>目標(biāo)代碼
宏定義:#define指令定義一個(gè)宏,#undef指令刪除一個(gè)宏定義。
文件包含:#include指令導(dǎo)致一個(gè)指定文件的內(nèi)容被包含到程序中。
條件編譯:#if、#ifdef、#ifndef、#endif、#elif和#else
1.?#if指令和#endif指令
在調(diào)試一個(gè)程序時(shí),若想要顯示出特定變量的值,因此將printf函數(shù)調(diào)用添加到程序中重要的部分。一旦找到錯(cuò)誤,經(jīng)常需啊喲保留這些printf函數(shù)調(diào)用,以備以后使用。條件編譯允許保留這些調(diào)用,但是讓編譯器忽略它們。
采用下面的方式。首先定義一個(gè)宏,并給它一個(gè)非零的值:
#define?DEBUG?1
宏的名字并不重要,在printf函數(shù)調(diào)用的前后加上#if和#endif:
#if?DEBUG
printf(“Value?of?i:?%d\n”,i);
#endif
在預(yù)處理過程中,#if指令會(huì)測(cè)試DEBUG的值,為非0預(yù)處理器會(huì)將printf函數(shù)保留在程序中(但#if和 ?#endif行會(huì)消失);DEBUG值若為0,預(yù)處理器則會(huì)將這三行代碼刪除。
#if指令會(huì)把沒有定義過的標(biāo)識(shí)符當(dāng)做值為0的宏對(duì)待。
2.?defined運(yùn)算符
???當(dāng)defined應(yīng)用于標(biāo)識(shí)符時(shí),若標(biāo)識(shí)符時(shí)是一個(gè)定義過的宏則返回1,否則返回0.通常與#if結(jié)合使用:
#if?defined(DEBUG)
...
#endif
僅當(dāng)DEBUG被定義成宏時(shí),#if和endif之間的代碼會(huì)被保留在程序中。DEBUG兩邊的括號(hào)不是必須的,可以寫成如下形式:
#if?defined?DEBUG
3.?#ifdef指令和#ifndef指令
? ?#ifdef指令測(cè)試一個(gè)標(biāo)識(shí)符是否已經(jīng)定義為宏,它的使用和#if指令類似:
???#ifdef?標(biāo)識(shí)符
當(dāng)標(biāo)識(shí)符被定義為宏時(shí)需要包含的代碼
#endif
? #ifndef指令與#ifdef指令類似,但測(cè)試的事標(biāo)識(shí)符是否沒有被定義為宏:
#ifndef?標(biāo)識(shí)符?????等價(jià)于?#if?!defined(標(biāo)識(shí)符)
轉(zhuǎn)載于:https://blog.51cto.com/ty1992/1685222
總結(jié)
- 上一篇: 工作中如何不累,保持好心态;遇到问题,尽
- 下一篇: 树莓派笔记