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