在包含.h文件和.c文件之間有什麼區別?例如,我有文件a.h和a.c,它們具有類A.我使用類B(b.h,b.c)中的類A.做一個包括:包含在.h文件和.c文件中的區別
#include "a.h"
b.h vs b.c.
在包含.h文件和.c文件之間有什麼區別?例如,我有文件a.h和a.c,它們具有類A.我使用類B(b.h,b.c)中的類A.做一個包括:包含在.h文件和.c文件中的區別
#include "a.h"
b.h vs b.c.
通常,類定義通常位於.h文件中,實現位於.c(pp)文件中。
在你的b.c文件而不是你的b.h文件中做#include "a.h"
的一個好處是,只要a.h發生變化,不僅b.c而且任何其他包含b.h的文件都將被重新編譯。
此外,你有沒有必要向任何使用b.h的人公開B的實現細節。這個想法是,b.h不應該包含使用B類的人不感興趣的其他信息(不是因爲它是祕密的,而是因爲人們不關心,而且你也不想用它來打擾他們)。
沒有必要強迫任何人包括b.h,間接地包含一打其他.h文件(因爲它們包含在b.h中),只是因爲你碰巧在b.c中使用了這些東西。避免混亂。
因此,如果可能的話,最好在b.c中#include "a.h"
!
但這並不總是可行的。如果你只是在b.c中使用A,並且在b.h中沒有對A的引用,那麼就沒關係。另外,如果波黑只包含指向A(即作爲成員,函數參數和返回值),但沒有「類型依賴」引用,你也可以把眼前這個在BH:
class A;
,仍然保持#include "a.h"
在公元前但是如果在a.h上有更多的引用或依賴關係,包括b.h在內的任何人都確實不能這樣做,那麼#include "a.h"
應該放在b.h中
在包含.h
或.c
文件中的頭文件中沒有區別。
包含文件的內容只是複製粘貼到包含它的文件中。
#include "a.h"
擴大爲a.h
的內容。
如果#include "a.h"
被置於b.h
中,那麼a.h
將在編譯期間被複制到b.h
中。
如果#include "a.h"
置於b.c
,然後a.h
將被編譯期間代替複製到b.c
。把
.h文件在.c和.h文件的頂部編譯
之前,但.c文件分別編譯然後鏈接到吸氣劑,使可執行文件
如果你把include指令在你的頭文件,包含該頭文件的其他文件也將獲得包含的頭文件。
foo.h中:
#include "dependency.h"
bar.h:
#include "foo.h"
在這種情況下,bar.h既有foo.h中和dependency.h。
您可以包含.c
文件 - 但按慣例您不能。
.h
文件是用於聲明 - 即.c
文件是定義和此.h
文件將要執行此操作。它就像.h
文件是烹飪書的內容,而.c
文件是實際的食譜。
你不能包含.c文件=) – karlphillip 2012-03-30 14:17:21
@karlphillip:爲什麼不呢? :) – sth 2012-03-30 14:17:52
我相信我誤解了這個問題。 – karlphillip 2012-03-30 14:19:37