《C++ Primer》筆記-#include,#ifndef

追憶丶年華發表於2018-01-16

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。 

相關文章