頭文件經常需要其他頭文件--避免多重包含

在編寫頭文件之前,我們需要引入一些額外的預處理器設施。預處理器允許
我們自定義變量。
預處理器變量 的名字在程序中必須是唯一的。任何與預處理器
變量相匹配的名字的使用都關聯到該預處理器變量。
爲了避免名字衝突,預處理器變量經常用全大寫字母表示。
預處理器變量有兩種狀態:已定義或未定義。定義預處理器變量和檢測其狀
態所用的預處理器指示不同。#define 指示接受一個名字並定義該名字爲預處理
器變量。#ifndef 指示檢測指定的預處理器變量是否未定義。如果預處理器變量
未定義,那麼跟在其後的所有指示都被處理,直到出現 #endif。
可以使用這些設施來預防多次包含同一頭文件:
#ifndef SALESITEM_H
#define SALESITEM_H
// Definition of Sales_itemclass and related functions goes here
#endif
條件指示

#ifndef SALESITEM_H
測試 SALESITEM_H 預處理器變量是否未定義。如果 SALESITEM_H 未定義,
那麼 #ifndef 測試成功,跟在 #ifndef 後面的所有行都被執行,直到發現
#endif。相反,如果 SALESITEM_H 已定義,那麼 #ifndef 指示測試爲假,該指
示和 #endif 指示間的代碼都被忽略。
爲了保證頭文件在給定的源文件中只處理過一次,我們首先檢測 #ifndef。
第一次處理頭文件時,測試會成功,因爲 SALESITEM_H 還未定義。下一條語句
定義了 SALESITEM_H。那樣的話,如果我們編譯的文件恰好又一次包含了該頭文
件。#ifndef 指示會發現 SALESITEM_H 已經定義,並且忽略該頭文件的剩餘部
分。
頭文件應該含有保護符,即使這些頭文件不會被其他頭
文件包含。編寫頭文件保護符並不困難,而且如果頭文
件被包含多次,它可以避免難以理解的編譯錯誤。
當沒有兩個頭文件定義和使用同名的預處理器常量時,這個策略相當有效。
我們可以爲定義在頭文件裏的實體(如類)命名預處理器變量來避免預處理器變
量重名的問題。一個程序只能含有一個名爲 Sales_item 的類。通過使用類名來
組成頭文件和預處理器變量的名字,可以使得很可能只有一個文件將會使用該預
處理器變量。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章