頭文件應該怎麼寫

因爲一個對象只能定義一次,能夠聲明多次,所以頭文件最重要的規則是隻聲明,不定義(除少數對象外)。而且只聲明其他文件需要用到的對象,其他文件不需要用到的對象沒必要在頭文件中聲明。當其他文件需要用到本文件定義的一些對象時,我們可以將這些對象寫到頭文件中,其他文件只要include這個頭文件即可使用相應的對象。

頭文件一般包含類的定義(不包含類定義外部的成員函數實現),extern變量聲明,以及函數聲明。要看一個項目好不好,看它的頭文件合不合理是一個參考因素。只有從邏輯上關聯比較緊密的對象聲明,我們才能夠放在一個頭文件當中,這樣它們在一起被使用的概率比較大,而且符合邏輯,方便管理。

能夠在頭文件中定義的特殊情況,除了類定義之外,還有在編譯的時候已知的const對象和內聯函數。除此之外不要定義,只能聲明。編譯時已知的const對象是指,用常量表達式初始化賦值的const對象。如:
const int ival = 5; //right
const int ival1 = a; //error

其實在每一個包含該頭文件的文件中都定義了一個相同名字的相同值的const對象。但是const對象的有效範圍只能是本文件,所以不會和其他文件的產生衝突。這樣一來,你可能會問,每個包含該頭文件的文件都定義了一個一模一樣的const對象,都給它分配內存,那豈不是差的代碼風格。其實不會,在代碼編譯之後,凡是調用了該const對象的地方都直接用對應的常量代替,而不會單獨給該const對象分配存儲空間。

還需要注意的是頭文件保護符,以避免頭文件被多次包含,和內聯函數的解釋。後續有空做進一步解釋。
下面是一個簡單的頭文件例子:

#ifndef TEST_H   //!< 頭文件保護符,防止多重調用
#define TEST_H 

const int ival = 5 * 2;      //!< 用常量表達式初始化的const對象

extern double totalNum;     //!< extern對象,說明該對象在其他文件定義
extern double sq2;

int addInt(int a, int b);   //!< 函數聲明
double sqrInt(int a);

#endif
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章