每個C++/C程序通常分為兩個文件。一個文件用於保存程序的聲明(declaration),稱為頭文件。另一個文件用於保存程序的實現(implementation),稱為定義(definition)文件。
C++/C程序的頭文件以“.h”為後綴,C程序的定義文件以“.c”為後綴,C++程序的定義文件通常以“.cpp”為後綴(也有一些系統以“.cc”或“.cxx”為後綴)。1 版權和版本的聲明
版權和版本的聲明位於頭文件和定義文件的開頭(參見示例1-1),主要內容有:
(1)版權信息。
(2)文件名稱,標識符,摘要。
(3)當前版本號,作者/修改者,完成日期。
(4)版本歷史信息。
/*
* Copyright (c) ********
* All rights reserved.
*
* 文件名稱:filename.h
* 文件標識:見配置管理計劃書
* 摘 要:簡要描述本文件的內容
*
* 當前版本:x.x
* 作 者:輸入作者(或修改者)名字
* 完成日期:xxxx年xx月xx日
*
* 取代版本:x.x
* 原作者 :輸入原作者(或修改者)名字
* 完成日期:xxxx年xx月xx日
*/
示例1-1 版權和版本的聲明
1.2 頭文件的結構
頭文件由三部分內容組成:
(1)頭文件開頭處的版權和版本聲明(參見示例1-1)。
(2)預處理塊。
(3)函數和類結構聲明等。
假設頭文件名稱為 graphics.h,頭文件的結構參見示例1-2。
【規則1-2-1】為了防止頭文件被重復引用,應當用ifndef/define/endif結構產生預處理塊。
【規則1-2-2】用 #include <filename.h> 格式來引用標准庫的頭文件(編譯器將從標准庫目錄開始搜索)。
【規則1-2-3】用 #include “filename.h” 格式來引用非標准庫的頭文件(編譯器將從用戶的工作目錄開始搜索)。
【建議1-2-1】頭文件中只存放“聲明”而不存放“定義”
在C++ 語法中,類的成員函數可以在聲明的同時被定義,並且自動成為內聯函數。這雖然會帶來書寫上的方便,但卻造成了風格不一致,弊大於利。建議將成員函數的定義與聲明分開,不論該函數體有多麼小。
【建議1-2-2】不提倡使用全局變量,盡量不要在頭文件中出現象extern int value 這類聲明。
(1)頭文件注釋(包括文件說明、功能描述、版權聲明等)(必須有);
(2)內部包含衛哨開始(#ifndef XXX/#define XXX)(必須有);
(3)#include其他頭文件(如果需要);
(4)外部變量和全局函數聲明(如果需要);
(5)常量和宏定義(如果需要);
(6)類型前置聲明和定義(如果需要);
(7)全局函數原型和內聯函數的定義(如果需要);
(8)內部包含衛哨結束:#endif // XXX(必須有);
(9)文件版本及修訂說明。
// 版權和版本聲明見示例1-1,此處省略。
#ifndef GRAPHICS_H // 防止graphics.h被重復引用
#define GRAPHICS_H
#include <math.h> // 引用標准庫的頭文件
…
#include “myheader.h” // 引用非標准庫的頭文件,
…
void Function1(…); // 全局函數聲明
…
class Box // 類結構聲明
{
…
};
#endif
附:extern全局變量的使用方法
<1>對變量而言,如果你想在本源文件中使用另一個源文件的變量,就需要在使用前用extern聲明該變量,或者在頭文件中用extern聲明該變量;
<2>對函數而言,如果你想在本源文件中使用另一個源文件的函數,就需要在使用前用聲明該變量,聲明函數加不加extern都沒關系,所以在頭文件中函數可以不用加extern。