標頭檔案的注意事項

2021-09-23 20:49:59 字數 1786 閱讀 2422

1),標頭檔案中可以寫const物件的定義。

因為全域性的const物件默 認是沒有extern的宣告的,所以它只在當前檔案中有效。把這樣的物件寫進標頭檔案中,即使它被包含到其他多個.cpp檔案中,這個物件也都只在包含它的 那個檔案中有效,對其他檔案來說是不可見的,所以便不會導致多重定義。同時,因為這些.cpp檔案中的該物件都是從乙個標頭檔案中包含進去的,這樣也就保證 了這些.cpp檔案中的這個const物件的值是相同的,可謂一舉兩得。同理,static物件的定義也可以放進標頭檔案。

2),標頭檔案中可以寫內聯函式(inline)的定義。

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

3),標頭檔案中可以寫類 (class)的定義。

因為在程式中建立乙個類的物件時,編譯器只有在這個類的定義完全可見的情況下,才能知道這個類的物件應該如何布局,所以,關於類的 定義的要求,跟內聯函式是基本一樣的。所以把類的定義放進標頭檔案,在使用到這個類的.cpp檔案中去包含這個標頭檔案,是乙個很好的做法。在這裡,值得一提 的是,類的定義中包含著資料成員和函式成員。資料成員是要等到具體的物件被建立時才會被定義(分配空間),但函式成員卻是需要在一開始就被定義的,這也就 是我們通常所說的類的實現。一般,我們的做法是,把類的定義放在標頭檔案中,而把函式成員的實現**放在乙個.cpp檔案中。這是可以的,也是很好的辦法。 不過,還有另一種辦法。那就是直接把函式成員的實現**也寫進類定義裡面。在c++的類中,如果函式成員在類的定義體中被定義,那麼編譯器會視這個函式為 內聯的。因此,把函式成員的定義寫進類定義體,一起放進標頭檔案中,是合法的。注意一下,如果把函式成員的定義寫在類定義的標頭檔案中,而沒有寫進類定義中, 這是不合法的,因為這個函式成員此時就不是內聯的了。一旦標頭檔案被兩個或兩個以上的.cpp檔案包含,這個函式成員就被重定義了。

五、標頭檔案中的保護措施

考慮一下,如果標頭檔案中只包含宣告語句的話,它被同乙個.cpp檔案包含再多次都沒問題——因為宣告語句的出現是不受限制的。然而,上面討論到的標頭檔案中的 三個例外也是標頭檔案很常用的乙個用處。那麼,一旦乙個標頭檔案**現了上面三個例外中的任何乙個,它再被乙個.cpp包含多次的話,問題就大了。因為這三個 例外中的語法元素雖然「可以定義在多個原始檔中」,但是「在乙個原始檔中只能出現一次」。設想一下,如果a.h中含有類a的定義,b.h中含有類b的定義,由於類b的定義依賴了類a,所以b.h中也#include了a.h。現在有乙個原始檔,它同時用到了類a和類b,於是程式設計師在這個原始檔中既把 a.h包含進來了,也把b.h包含進來了。這時,問題就來了:類a的定義在這個原始檔**現了兩次!於是整個程式就不能通過編譯了。你也許會認為這是程式設計師的失誤——他應該知道b.h包含了a.h——但事實上他不應該知道。

使用"#define"配合條件編譯可以很好地解決這個問題。在一 個頭檔案中,通過#define定義乙個名字,並且通過條件編譯#ifndef…#endif使得編譯器可以根據這個名字是否被定義,再決定要不要繼續編譯該頭文中後續的內容。這個方法雖然簡單,但是寫標頭檔案時一定記得寫進去。

iOS 標頭檔案匯入 class注意事項

ios 標頭檔案匯入 class注意事項 一,匯入標頭檔案有兩種不同的方法 使用引號或者使用尖括號,例如,import 和 import tire.h 帶尖括號的語句是用來匯入系統標頭檔案的,而帶引號的語句則說明匯入的是專案本地的標頭檔案,如果你看到的頭檔名是用尖括號括起來的,那 麼這個標頭檔案對你...

c語言標頭檔案以及make注意事項

標頭檔案說明 自己定義的標頭檔案和專案檔案放在一起,注意使用 而不是使用 系統的標頭檔案才使用 當main函式要呼叫其他函式的時候在編譯的時候需要將其他的c檔案也一起編譯 gcc main.c test.c makefile說明 當專案很大的時候可以使用makefile進行專案管理 makefile...

Xcode PCH檔案注意事項

1.在xcode6.1中 pch檔案需要手動新增 注意要關聯工程 在建立的時候選擇關聯工程 右擊 new file other pch file 新建.pch檔案之後匯入需要的標頭檔案或者巨集定義可以加快編譯速度。2.需要在building setting中設定prefix header的名稱 sr...