【規則1-2-1】為了防止標頭檔案被重複引用,應當用ifndef/define/endif結構產生預處理塊。
一、為什麼會出現標頭檔案被重複引用的問題
在乙個cpp檔案中,可以包含多個標頭檔案,而標頭檔案間又是可以相互引用的,這就導致乙個cpp檔案中可能間接多次包含某個標頭檔案,如果標頭檔案中 沒有防止 多次編譯的語句,就會出現標頭檔案被重複定義的編譯錯誤
二、怎麼防止 標頭檔案被重複引用
1、使用 ifndef/define/endif 結構產生預處理塊
適用條件:在任意編譯環境都可以使用
2、使用 #pragma once
適用條件:在微軟的開發工具上的使用
三、命名規則
一般是頭檔名全大寫,前後加下劃線,並把檔名中的「.」也變成下劃線
四、舉例
#ifndef方式
#ifndef _test_h_
#define _test_h_
class test
;#endif
#pragma once方式
#pragma once
class test
;
五、執行過程
標頭檔案_test_h第一次執行時,還沒有被define,則滿足#ifndef_test_h的條件,
則執行它下面的內容 #define_test_h 和 test類的宣告;
之後再編譯到該標頭檔案時,由於已經定義了_test_h了,所以語句#ifndef_test_h 不執行,
而執行#endif的語句,這裡沒有語句,就直接結束了
因此,在某乙個cpp檔案中,多次包含了#include時,就不會出現標頭檔案被重複定義的編譯錯誤了
注: 1、test.h檔案的組成:
(1)標頭檔案開頭處的版權和版本宣告。
(2)預處理塊。
(3)函式和類結構宣告等。
2、test.cpp檔案的組成:
(1)定義檔案開頭處的版權和版本宣告。
(2)對一些標頭檔案的引用。
(3)程式的實現體(包括資料和**)
3、標頭檔案的作用:
(1) 通過標頭檔案來呼叫庫功能
在很多場合,源**不便(或不准)向使用者公布,只要向使用者提供標頭檔案和二進位制的庫即可。使用者只需要按照標頭檔案中的介面宣告來呼叫庫功能,而不必關心介面怎麼實現的。編譯器會從庫中提取相應的**。
(2) 標頭檔案能加強型別安全檢查
如果某個介面被實現或被使用時,其方式與標頭檔案中的宣告不一致,編譯器就會指出錯誤,這一簡單的規則能大大減輕程式設計師除錯、改錯的負擔。
高質量C C程式設計指南 第1章 檔案結構
第1章 檔案結構 每個c c程式通常分為兩個檔案。乙個檔案用於儲存程式的宣告 declaration 稱為標頭檔案。另乙個檔案用於儲存程式的實現 implementation 稱為定義 definition 檔案。c c程式的標頭檔案以 h 為字尾,c程式的定義檔案以 c 為字尾,c 程式的定義檔案...
高質量C C程式設計指南 第1章 檔案結構
第 1 章 檔案結構 每個 c c 程式通常分為兩個檔案。乙個檔案用於儲存程式的宣告 declaration 稱為標頭檔案。另乙個檔案用於儲存程式的實現 implementation 稱為定義 definition 檔案。c c 程式的標頭檔案以 h 為字尾,c 程式的定義檔案以 c 為字尾,c 程...
高質量C C程式設計指南 第5章 常量
常量是一種識別符號,它的值在執行期間恆定不變。c語言用 define來定義常量 稱為巨集常量 c 語言除了 define外還可以用const來定義常量 稱為const常量 如果不使用常量,直接在程式中填寫數字或字串,將會有什麼麻煩?1 程式的可讀性 可理解性 變差。程式設計師自己會忘記那些數字或字串...