高質量C++/C程式設計指南(第1章 檔案結構) (轉)

worldblog發表於2007-12-12
高質量C++/C程式設計指南(第1章 檔案結構) (轉)[@more@] 

章 結構

每個C++/C通常分為兩個檔案。一個檔案用於儲存程式的宣告(declaration),稱為標頭檔案。另一個檔案用於儲存程式的實現(implementation),稱為定義(definition)檔案。

C++/C程式的標頭檔案以“.h”為字尾,C程式的定義檔案以“.c”為字尾,C++程式的定義檔案通常以“.cpp”為字尾(也有一些以“.cc”或“.cxx”為字尾)。

版權和版本的宣告

版權和版本的宣告位於標頭檔案和定義檔案的開頭(參見示例1-1),主要內容有:

(1)版權資訊。

(2)檔名稱,識別符號,摘要。

(3)當前版本號,作者/修改者,完成日期。

(4)版本歷史資訊。

 :namespace prefix = o ns = "urn:schemas--com::office" />

/*

* Copyright (c) 2001,上海貝爾有限公司應用事業部

* All rights reserved.

*

* 檔名稱:filename.h

* 檔案標識:見管理計劃書

* 摘  要:簡要描述本檔案的內容

*

* 當前版本:1.1

* 作  者:輸入作者(或修改者)名字

* 完成日期:2001年7月20日

*

* 取代版本:1.0

* 原作者  :輸入原作者(或修改者)名字

* 完成日期:2001年5月10日

*/

 

示例1-1 版權和版本的宣告

標頭檔案的結構

標頭檔案由三部分內容組成:

(1)標頭檔案開頭處的版權和版本宣告(參見示例1-1)。

(2)預處理塊。

(3)和類結構宣告等。

假設標頭檔案名稱為 graphics.h,標頭檔案的結構參見示例1-2。

 

【規則1-2-1為了防止標頭檔案被重複引用,應當用ifndef/define/endif結構產生預處理塊。

【規則1-2-2用 #include 格式來引用標準庫的標頭檔案(將從標準庫目錄開始搜尋)。

【規則1-2-3用 #include “filename.h” 格式來引用非標準庫的標頭檔案(編譯器將從的工作目錄開始搜尋)。

²  【建議1-2-1標頭檔案中只存放“宣告”而不存放“定義”

在C++ 語法中,類的成員函式可以在宣告的同時被定義,並且自動成為行內函數。這雖然會帶來書寫上的方便,但卻造成了風格不一致,弊大於利。建議將成員函式的定義與宣告分開,不論該函式體有多麼小。

²  【建議1-2-2不提倡使用全域性變數,儘量不要在標頭檔案中出現象extern int value 這類宣告。

 

// 版權和版本宣告見示例1-1,此處省略。

 

#ifndef  GRAPHICS_H  // 防止graphics.h被重複引用

#define  GRAPHICS_H

 

#include   // 引用標準庫的標頭檔案

#include “myheader.h”   // 引用非標準庫的標頭檔案

void Function1(…);  // 全域性函式宣告

class Box    // 類結構宣告

{

};

#endif

示例1-2 C++/C標頭檔案的結構

 

定義檔案的結構

定義檔案有三部分內容:

(1)  定義檔案開頭處的版權和版本宣告(參見示例1-1)。

(2)  對一些標頭檔案的引用。

(3)  程式的實現體(包括資料和程式碼)。

假設定義檔案的名稱為 graphics.cpp,定義檔案的結構參見示例1-3。

 

// 版權和版本宣告見示例1-1,此處省略。

 

#include “graphics.h”  // 引用標頭檔案

 

// 全域性函式的實現體

void Function1(…)

{

}

 

// 類成員函式的實現體

void Box::Draw(…)

{

}

示例1-3 C++/C定義檔案的結構

標頭檔案的作用

早期的語言如Basic、Fortran沒有標頭檔案的概念,C++/C語言的初學者雖然會用使用標頭檔案,但常常不明其理。這裡對標頭檔案的作用略作解釋:

(1)透過標頭檔案來庫功能。在很多場合,不便(或不準)向使用者公佈,只要向使用者提供標頭檔案和二進位制的庫即可。使用者只需要按照標頭檔案中的介面宣告來呼叫庫功能,而不必關心介面怎麼實現的。編譯器會從庫中提取相應的程式碼。

(2)標頭檔案能加強型別檢查。如果某個介面被實現或被使用時,其方式與標頭檔案中的宣告不一致,編譯器就會指出錯誤,這一簡單的規則能大大減輕程式設計師、改錯的負擔。

目錄結構

如果一個的標頭檔案數目比較多(如超過十個),通常應將標頭檔案和定義檔案分別儲存於不同的目錄,以便於維護。

例如可將標頭檔案儲存於include目錄,將定義檔案儲存於目錄(可以是多級目錄)。

如果某些標頭檔案是私有的,它不會被使用者的程式直接引用,則沒有必要公開其“宣告”。為了加強資訊隱藏,這些私有的標頭檔案可以和定義檔案存放於同一個目錄。

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991829/,如需轉載,請註明出處,否則將追究法律責任。

相關文章