預(yù)處理命令(主要有三種)
- 宏定義
- 文件包含
- 條件編譯
- 宏定義
如:
#define PI 3.1415926
由于 C++已增加了 const 語句定義常量,因此#define 實(shí)際上已不多用。
還可以用#define命令定義帶參數(shù)的宏定義。其定義的一般形式為
#define 宏命(參數(shù)表) 字符串
如
#define S(a, b) a*b //定義宏 S(句型面積),a、b為宏的參數(shù)
使用的形式如下:
area = S(3, 2);
賦值語句展開為
area = 3 * 2;
由于 C++增加了內(nèi)置函數(shù)(inline),比用帶參數(shù)的宏定義更方便,因此比較不用#define,定義宏了,主要用于條件編譯中。
- 文件包含
所謂文件包含處理是指一個(gè)源文件可以將另一個(gè)源文件的全部內(nèi)容包含進(jìn)來,即將另外的文件包含到本文件之中。如:
#include "file2.cpp"
在編譯預(yù)處理時(shí),將 file2.cpp 文件中的內(nèi)容拷貝并插入到#include "file2.cpp"命令處,即文件 file2.cpp 的全部內(nèi)容被包含到 file1.cpp 中。
文件包含可以節(jié)省很多重復(fù)勞動(dòng)。如,可以將一些固定的常量組成一個(gè)文件,各人可以用#include 命令將文件包含到自己的源文件中。如要修改一些常數(shù),不必修改每個(gè)程序,只需修改一個(gè)文件即可。但要注意,被包含的文件經(jīng)過修改后,凡包含此文件的所有文件都要重新編譯。
頭文件一般包含以下內(nèi)容:
- 類型的聲明
- 函數(shù)聲明
- 內(nèi)置函數(shù)的定義
- 宏定義
- 全局變量定義
- 外部變量聲明, 如 extern
- 包含其他頭文件
include 命令的兩種形式
- < > 尖括號(hào)
如:#include <cmath> - " " 雙引號(hào)
如:#include "cmath"
兩者的區(qū)別是:用尖括號(hào)時(shí),系統(tǒng)到系統(tǒng)目錄中尋找要包含的文件,如果找不到,編譯系統(tǒng)就給出錯(cuò)誤信息。所謂系統(tǒng)目錄是指存放 C++系統(tǒng)的目錄。一般情況下,庫函數(shù)和C++編譯系統(tǒng)是存放在同一目錄中的。
有時(shí)被包含的文件不在系統(tǒng)目錄中,此時(shí)用雙引號(hào)的形式,指出文件路徑和文件名,如:#include "c:\ tan\C++\file1.c",它的作用是:要求編譯系統(tǒng)從 C 盤上的目錄\tan\C++中尋找 file1.c文件,如果找不到就到系統(tǒng)目錄中找,如果還找不到,則不再尋找,給出出錯(cuò)信息。
如果沒有給出絕對(duì)路徑,如#include "file2.c",則默認(rèn)指用戶當(dāng)前目錄中的文件。系統(tǒng)先在用戶當(dāng)前目錄中尋找要包含的文件,若找不到,再按標(biāo)準(zhǔn)方式查找。
對(duì)于系統(tǒng)提供的文件,可以用兩種方式都能找到,尖括號(hào)形式更直截了當(dāng),效率更高。
- 條件編譯
希望程序中某一部分只在滿足一定條件時(shí)才進(jìn)行編譯,如果不滿足條件,就不編譯這段內(nèi)容。
(1)
#ifdef 標(biāo)識(shí)符
程序段1
#else
程序段2
#endif
(2)
#ifndef 標(biāo)識(shí)符
程序段1
#else
程序段2
#endif
(3)
#if 表達(dá)式
程序段1
#else
程序段2
#endif