C語(yǔ)言零基礎(chǔ)教程之預(yù)處理和宏定義篇
C語(yǔ)言預(yù)處理
在C語(yǔ)言中,預(yù)處理指令是在實(shí)際源代碼編譯之前執(zhí)行的步驟。它不是編譯的一部分。C語(yǔ)言中的預(yù)處理程序指令用于定義和替換文本中的標(biāo)記,還用于將其他文件的內(nèi)容插入源文件。
當(dāng)我們嘗試編譯程序時(shí),先執(zhí)行預(yù)處理程序命令,然后再編譯程序。
- 每個(gè)預(yù)處理器命令均以#符號(hào)開頭。
- 預(yù)處理不是語(yǔ)句,故預(yù)處理命令不需要(;)結(jié)束
C語(yǔ)言宏定義
#define
用于在C編程語(yǔ)言中創(chuàng)建符號(hào)常量(稱為宏)。此預(yù)處理器命令也可以與參數(shù)化宏一起使用。
- 宏替換
- 宏函數(shù)
案例程序如下:

帶語(yǔ)句的宏以及多行宏的編寫

C語(yǔ)言銷毀宏定義
#undef
用于銷毀已經(jīng)使用#define創(chuàng)建的宏。如下測(cè)試代碼:

C語(yǔ)言宏判斷
#ifdef
如果已定義宏,則#ifdef返回TRUE;如果未定義宏,則返回FALSE。
#ifndef
如果未定義指定的宏,則#ifndef返回TRUE,否則返回FALSE。
#endif
和#ifdef與#endif成對(duì)使用
如下測(cè)試代碼:

條件編譯
#if
#if使用指定宏的值進(jìn)行條件編譯。
#else
#else是#if的替代方法。
#elif
#elif是#else,在一條語(yǔ)句中后接#if。
#endif
#endif用于終止預(yù)處理器條件宏。
測(cè)試案例如下:

注意點(diǎn):
預(yù)處理是在編譯期完成的,所以在處理變量的時(shí)候一定要注意,如下測(cè)試代碼:

其他
#include
#include用于將特定的頭文件插入C程序。
#error
#error用于在stderr上打印錯(cuò)誤消息。
#pragma
#pragma用于向編譯器發(fā)出特殊命令。
如:包含靜態(tài)庫(kù)資源,內(nèi)存對(duì)齊方式。
C語(yǔ)言有預(yù)定義的宏
它們?nèi)缦滤?..
- __ DATE __:當(dāng)前日期,
- __ TIME __:當(dāng)前時(shí)間
- __ FILE __:這包含當(dāng)前文件名。
- __ LINE __:包含當(dāng)前行號(hào)。
- __ STDC __:編譯器是ANSI,值為1。
如下測(cè)試代碼:

尾言
作業(yè):使用宏,實(shí)現(xiàn)宏鏈表。
哪里有什么老天的眷顧,所謂的幸運(yùn)和成功都源自你自身的努力和付出。請(qǐng)記住,你現(xiàn)在多走的每一步都在拉開著你和別人的差距。要做,就做生活的強(qiáng)者。