2015-07-11 57 views
-4

我一直被告知不要直接包含*.cpp文件。C++包含語句和鏈接

難道只有#include *.h文件不是*.cpp文件的編程習慣嗎?

+0

「是」,但是對於答案來說這有點簡短:)(儘管在通常支持之前實現整個程序優化有一些竅門) –

+0

瞭解你在做什麼,爲什麼和如何做。然後就解決問題的最佳方式提出自己的結論。 –

回答

2

是的,你可以考慮一下好的編程習慣!

話雖如此,編程中沒有教條。 我遇到過一些情況,其中包含一些其他的.h文件非常有效。

但只有當你有相當的經驗和很好的理由偏離時纔會這樣做。

作爲使用的頭文件的原因是:

C++的後繼C.傳統C和C++有沒有真正的模塊機制等例如Modula或Ada。原則上,多個C ​​++源文件是獨立編譯的,只有鏈接器在編譯完成後才能看到它們。通過將例如頭文件中的類聲明,頭文件成爲一種模塊接口。通過將頭部包含在定義類成員的模塊M的.cpp文件中以及使用該模塊M的其他模塊中,創建鏈接引腳。因此,編譯器可以檢查M中的聲明是否與其他模塊中的聲明匹配。這使交叉模塊類型檢查。

0

我還補充說,最重要的事實是,在C++中我們必須區分定義和聲明。如果編譯器加載了兩個相同的定義(函數或變量定義),則會拋出錯誤並結束編譯。如果我們想在許多獨立編譯的翻譯單元中使用相同的功能,那麼您需要聲明此功能。因此,我們把聲明放在一個.hpp文件中,這個文件可以被其他文件#include包含。在.cpp中放置定義(這意味着編譯器分配內存)。讓我們考慮全局變量或靜態變量,這些變量不能放在.hpp文件中,因爲如果編譯器在同一個名稱空間中遇到兩個相同的定義,則退出編譯。