編譯預(yù)處理
C 程序設(shè)計(jì)中的編譯預(yù)處理是一項(xiàng)重要的功能,包括了宏和文件包含兩個(gè)主要部分。宏在C 源程序中,可以使用宏來代表一個(gè)字符串,稱為"宏"。在編譯預(yù)處理階段,所有出現(xiàn)的"宏名"都會(huì)被替換為宏定義中的字符
C 程序設(shè)計(jì)中的編譯預(yù)處理是一項(xiàng)重要的功能,包括了宏和文件包含兩個(gè)主要部分。
宏
在C 源程序中,可以使用宏來代表一個(gè)字符串,稱為"宏"。在編譯預(yù)處理階段,所有出現(xiàn)的"宏名"都會(huì)被替換為宏定義中的字符串,這個(gè)過程稱為"宏代換"或者"宏展開"。
無參宏的宏名后面不帶參數(shù)。一般的宏定義形式如下:
```
#define 標(biāo)識(shí)符 字符串
```
使用無參宏定義需要注意以下幾點(diǎn):
1. 宏定義只是一種簡單的文本替換,字符串中可以包含任何字符,預(yù)處理程序?qū)ζ洳蛔鋈魏螜z查。
2. 宏定義不是說明或語句,在行末不要加分號(hào),如果加上分號(hào),則連分號(hào)也會(huì)被替換。
3. 宏定義必須寫在函數(shù)之外,其作用域從宏定義命令到源程序結(jié)束。
4. 如果在源程序中將宏名用引號(hào)括起來,則預(yù)處理程序不會(huì)對其進(jìn)行宏代換。
5. 宏定義允許嵌套,可以在宏定義的字符串中使用已經(jīng)定義的宏名。
文件包含
文件包含命令的功能是將指定的文件插入到當(dāng)前命令行的位置,取代該命令行,從而將指定的文件和當(dāng)前的源程序文件連接成一個(gè)源文件。
文件包含的一般形式如下:
```
#include "文件名"
```
使用文件包含需要注意以下幾點(diǎn):
1. 使用尖括號(hào)表示在系統(tǒng)目錄中查找被包含的文件,而不在源文件目錄中查找;使用雙引號(hào)則表示首先在當(dāng)前的源文件目錄中查找,若未找到才到系統(tǒng)目錄中查找。
2. 一個(gè)include命令只能指定一個(gè)被包含的文件。
3. 文件包含允許嵌套,即在一個(gè)被包含的文件中又可以包含另一個(gè)文件。
#ifdef條件
如果標(biāo)識(shí)符已經(jīng)通過#define命令進(jìn)行了定義,則對程序段1進(jìn)行編譯;否則對程序段2進(jìn)行編譯。一般形式如下:
```
#ifdef 標(biāo)識(shí)符
程序段1
#else
程序段2
#endif
```
#ifndef條件
如果標(biāo)識(shí)符沒有通過#define命令進(jìn)行定義,則對程序段1進(jìn)行編譯;否則對程序段2進(jìn)行編譯。一般形式如下:
```
#ifndef 標(biāo)識(shí)符
程序段1
#else
程序段2
#endif
```
#if條件
如果常量表達(dá)式的值為真(非0),則對程序段1進(jìn)行編譯;否則對程序段2進(jìn)行編譯。一般形式如下:
```
#if 常量表達(dá)式
程序段1
#else
程序段2
#endif
```