《c++primer》一書2.9.2節(jié):在編寫頭文件之前,我們需要引入一些額外的預(yù)處理器設(shè)施。預(yù)處理器允許我們自定義變量。預(yù)處理器變量的名字在程序中必須是唯一的。任何與預(yù)處理器變量相匹配的名字的使用都關(guān)聯(lián)到該預(yù)處理器變量。為了避免名字沖突,預(yù)處理器變量經(jīng)常用全大寫字母表示。預(yù)處理器變量有兩種狀態(tài):已定義或未定義。定義預(yù)處理器變量和檢測(cè)其狀態(tài)所用的預(yù)處理器指示不同。#define指示接受一個(gè)名字并定義該名字為預(yù)處理器變量。#ifndef指示檢測(cè)指定的預(yù)處理器變量是否未定義。如果預(yù)處理器變量未定義,那么跟在其后的所有指示都被處理,直到出現(xiàn)#endif??梢允褂眠@些設(shè)施來(lái)預(yù)防多次包含同一頭文件:#ifndefSALESITEM_H#defineSALESITEM_H//DefinitionofSales_itemclassandrelatedfunctionsgoeshere#endif條件指示#ifndefSALESITEM_H測(cè)試SALESITEM_H預(yù)處理器變量是否未定義。如果SALESITEM_H未定義,那么#ifndef測(cè)試成功,跟在#ifndef后面的所有行都被執(zhí)行,直到發(fā)現(xiàn)#endif。相反,如果SALESITEM_H已定義,那么#ifndef指示測(cè)試為假,該指示和#endif指示間的代碼都被忽略。為了保證頭文件在給定的源文件中只處理過(guò)一次,我們首先檢測(cè)#ifndef。第一次處理頭文件時(shí),測(cè)試會(huì)成功,因?yàn)镾ALESITEM_H還未定義。下一條語(yǔ)句定義了SALESITEM_H。那樣的話,如果我們編譯的文件恰好又一次包含了該頭文件。#ifndef指示會(huì)發(fā)現(xiàn)SALESITEM_H已經(jīng)定義,并且忽略該頭文件的剩余部分。