高質量程式設計指南 第1章

2021-06-06 22:29:11 字數 1449 閱讀 4123

【規則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 程式的可讀性 可理解性 變差。程式設計師自己會忘記那些數字或字串...