c中標頭檔案在cpp檔案中引用和 h檔案引用的思考

2021-06-22 10:58:14 字數 880 閱讀 6694

我們在編寫程式中標頭檔案是經常使用的。但是標頭檔案是應該包含在.h檔案中還是在.cpp檔案中。在這個當中有什麼樣去區別呢。  假如說我們編寫了乙個a.cpp  。我們將a.cpp檔案的變數和函式申明在a.h中。在a.h檔案有使用了b.中定義的型別type1資料m_type,同樣b.cpp的標頭檔案一些變數也宣告在b.h中。此時我們當然可以在a.cpp中包含b.h 也可以在a.h中。這樣都是可行的,因為我們編譯的時候會會將b.h包含進來。而.h檔案是不參與編譯的。然後我們繼續深入。假如我們將b.h檔案定義在a.cpp中 。我們在c.pp要是a.cpp的函式。我們將a.h檔案包含在c.cpp或者c.h的時候我們會發現c.pp會報錯(假如c.pp中沒有包含b.h或在包含b.h,但b.h放在c.h的下面) 報錯的是將我們沒有找到m_type;m_type是無效值。  我開始的時候的也比較疑惑。現在想通了。編譯器會單獨編譯每個cpp檔案。標頭檔案會複製到cpp檔案當中。我們的c.pp中沒有包含b.h。c.pp中會複製a.h這時你會發現問題來來了, a.h複製到c.cpp中會將type1 m_type 也複製到c.cpp中  這時候編譯就會不type1 m_type  就會報不認識type1 的錯誤。如果我們將b.h包含在a.h中這個問題就會避免掉。因為在a.h在c.cpp中複製展開的時候,b.h也會在c.cpp中複製展開。從而避免了這個問題。當我們在編譯遇到這樣的問題的時候 ,我們應該去看是哪個cpp出來問題  然後在看看是哪個標頭檔案出來問題,這樣就能找到我們包含的錯誤。

但是我們有時候會遇到這樣的乙個問題a.cpp 要呼叫b.cpp中的函式,而b.cpp又要呼叫a.cpp 的函式 。這就牽扯到相互呼叫  這是如果我們把b.h中包含a.h, a.h中包含b.h。這是後編譯會出現問題。解決的辦法是將a.h包含在b.cpp中,將b.h包含在a.cpp中。這樣就能解決問題。

以上是我的一點小經驗 希望能幫到大家。

C 中標頭檔案( h)和原始檔( cpp)寫法

這個問題在許多c 程式設計師看來會很搞笑,這麼簡單的問題還用得著你廢話!但是由於本人生性愚鈍,學c 的時候,確實花了很久的時間都搞不明白,只是會寫乙個檔案,但不會寫乙個工程。而用c 編寫比較大型的專案時,檔案的分割管理確實確實是非常必要的 下面就非常簡潔明瞭地談談標頭檔案 h 和原始檔 cpp 應該...

C 中標頭檔案的問題

在編c 時遇到的問題,庫函式strlen,strcmp的標頭檔案問題 include include include using namespace std 兩個都能正確編譯執行,string也是存在的,都是共存的 今天用到randomize 發現沒有了,查了一下,原來randomize 和rand...

C 中標頭檔案iostream介紹

c 語言不直接處理輸入輸出,而是通過一簇定義在標準庫中的型別來處理io。這些型別支援從裝置讀取資料 向裝置寫入資料的io操作,裝置可以是檔案 控制台視窗等。還有一些型別允許記憶體io,即,從string讀取資料,向string寫入資料。c c 11中標頭檔案定義了標準輸入 輸出流物件。包含了也自動包...