1.理解 #include 指示是怎樣工作的
#include 設 施是 C++ 前處理器的一部分。前處理器處理程式的原始碼,在編譯器之前執行。 C++ 繼承了 C 的非常精細的前處理器。現在的 C++ 程式以高度受限的方式使用 前處理器。
#include 指示只接受一個引數:標頭檔案名。前處理器用指定的標頭檔案的內 容替代每個 #include。我們自己的標頭檔案儲存在檔案中。系統的標頭檔案可能用 特定於編譯器的更高效的格式儲存。無論標頭檔案以何種格式儲存,一般都含有支 持分別編譯所需的類定義及變數和函式的宣告。
如果標頭檔案名括在尖括號(< >)裡,那麼認為該標頭檔案是標準標頭檔案。編 譯器將會在預定義的位置集查詢該標頭檔案,這些預定義的位置可以通過設定查詢 路徑環境變數或者通過命令列選項來修改。使用的查詢方法因編譯器的不同而差 別迥異。建議你諮詢同事或者查閱編譯器使用者指南來獲得更多的資訊。如果頭文 件名括在一對引號裡,那麼認為它是非系統標頭檔案,非系統標頭檔案的查詢通常開 始於原始檔所在的路徑。
2.用#ifndef避免多重包含
#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 指示間的程式碼都被忽略。
在編寫標頭檔案之前,我們需要引入一些額外的前處理器設施。前處理器允許 我們自定義變數。
前處理器變數 的名字在程式中必須是唯一的。 為了避免名字衝突,前處理器變數經常用全大寫字母表示。
前處理器變數有兩種狀態:已定義或未定義。定義前處理器變數和檢測其狀 態所用的前處理器指示不同。#define 指示接受一個名字並定義該名字為預處理 器變數。#ifndef 指示檢測指定的前處理器變數是否未定義。如果前處理器變數 未定義,那麼跟在其後的所有指示都被處理,直到出現 #endif。