標頭檔案中應該寫什麼

2021-06-01 04:40:14 字數 1946 閱讀 3569

通 過上面的討論,我們可以了解到,標頭檔案的作用就是被其他的.cpp

包含進去的。它們本身並不參與編譯,但實際上,它們的內容卻在多個

.cpp

檔案中得到了 編譯。通過

「定義只能有一次

」的規則,我們很容易可以得出,標頭檔案中應該只放變數和函式的宣告,而不能放它們的定義。因為乙個標頭檔案的內容實際上是會被引 入到多個不同的

.cpp

檔案中的,並且它們都會被編譯。放宣告當然沒事,如果放了定義,那麼也就相當於在多個檔案中出現了對於乙個符號(變數或函式)的定 義,縱然這些定義都是相同的,但對於編譯器來說,這樣做不合法。

所以,應該記住的一點就是,.h

標頭檔案中,只能存在變數或者函式的宣告, 而不要放定義。即,只能在標頭檔案中寫形如:

extern int a;

和void f();

的句子。這些才是宣告。如果寫上

int a;

或者void f() {}

這樣的句子,那麼一旦這個標頭檔案被兩個或兩個以上的

.cpp

檔案包含的話,編譯器會立馬報錯。

但是,這個規則是有三個例外的。

一,標頭檔案中可以寫const

物件的定義。因為全域性的

const

物件默 認是沒有

extern

的宣告的,所以它只在當前檔案中有效。把這樣的物件寫進標頭檔案中,即使它被包含到其他多個

.cpp

檔案中,這個物件也都只在包含它的 那個檔案中有效,對其他檔案來說是不可見的,所以便不會導致多重定義。同時,因為這些

.cpp

檔案中的該物件都是從乙個標頭檔案中包含進去的,這樣也就保證 了這些

.cpp

檔案中的這個

const

物件的值是相同的,可謂一舉兩得。同理,

static

物件的定義也可以放進標頭檔案。

二,標頭檔案中可 以寫內聯函式(inline

)的定義。因為

inline

函式是需要編譯器在遇到它的地方根據它的定義把它內聯展開的,而並非是普通函式那樣可以先宣告再鏈 接的(內聯函式不會鏈結),所以編譯器就需要在編譯時看到內聯函式的完整定義才行。如果內聯函式像普通函式一樣只能定義一次的話,這事兒就難辦了。因為在 乙個檔案中還好,我可以把內聯函式的定義寫在最開始,這樣可以保證後面使用的時候都可以見到定義;但是,如果我在其他的檔案中還使用到了這個函式那怎麼辦 呢?這幾乎沒什麼太好的解決辦法,因此

c++規定,內聯函式可以在程式中定義多次,只要內聯函式在乙個

.cpp

檔案中只出現一次,並且在所有的

.cpp

文 件中,這個內聯函式的定義是一樣的,就能通過編譯。那麼顯然,把內聯函式的定義放進乙個標頭檔案中是非常明智的做法。

三,標頭檔案中可以寫類 (class

)的定義。因為在程式中建立乙個類的物件時,編譯器只有在這個類的定義完全可見的情況下,才能知道這個類的物件應該如何布局,所以,關於類的 定義的要求,跟內聯函式是基本一樣的。所以把類的定義放進標頭檔案,在使用到這個類的

.cpp

檔案中去包含這個標頭檔案,是乙個很好的做法。在這裡,值得一提 的是,類的定義中包含著資料成員和函式成員。資料成員是要等到具體的物件被建立時才會被定義(分配空間),但函式成員卻是需要在一開始就被定義的,這也就 是我們通常所說的類的實現。一般,我們的做法是,把類的定義放在標頭檔案中,而把函式成員的實現**放在乙個

.cpp

檔案中。這是可以的,也是很好的辦法。 不過,還有另一種辦法。那就是直接把函式成員的實現**也寫進類定義裡面。在

c++的類中,如果函式成員在類的定義體中被定義,那麼編譯器會視這個函式為 內聯的。因此,把函式成員的定義寫進類定義體,一起放進標頭檔案中,是合法的。注意一下,如果把函式成員的定義寫在類定義的標頭檔案中,而沒有寫進類定義中, 這是不合法的,因為這個函式成員此時就不是內聯的了。一旦標頭檔案被兩個或兩個以上的

.cpp

檔案包含,這個函式成員就被重定義了。

標頭檔案應該怎麼寫

因為乙個物件只能定義一次,能夠宣告多次,所以標頭檔案最重要的規則是只宣告,不定義 除少數物件外 而且只宣告其他檔案需要用到的物件,其他檔案不需要用到的物件沒必要在標頭檔案中宣告。當其他檔案需要用到本檔案定義的一些物件時,我們可以將這些物件寫到頭檔案中,其他檔案只要include這個標頭檔案即可使用相...

標頭檔案中應該放些什麼2

標頭檔案中應該放些什麼2 字型 作為一般規則,應該把這些東西放入頭 h 檔案中 當宣告或巨集定義需要在多個檔案中共享時,尤其需要把它們放入標頭檔案中。特別是,永遠不要把外部函式原型 即外部函式宣告 放到 c 檔案中。另一方面,如果巨集定義或宣告為乙個 c 檔案私有,則最好留在 c 檔案中。標頭檔案中...

標頭檔案寫什麼如何寫比較標準

用於學習記錄 譚浩強的142頁,關於標頭檔案的說明 標頭檔案是個模組之間的介面檔案。1 型別定義 例如結構體 列舉,這兩種型別在ti2000dsp的標頭檔案中很常見。2 函式宣告 乙個標頭檔案對應乙個c檔案,該c檔案中定義的函式,都要在這個標頭檔案中做外部宣告,因為這個函式可能被其他的c檔案裡面的函...