2012-03-30 104 views
1

在包含.h文件和.c文件之間有什麼區別?例如,我有文件a.h和a.c,它們具有類A.我使用類B(b.h,b.c)中的類A.做一個包括:包含在.h文件和.c文件中的區別

#include "a.h" 

b.h vs b.c.

+0

你不能包含.c文件=) – karlphillip 2012-03-30 14:17:21

+5

@karlphillip:爲什麼不呢? :) – sth 2012-03-30 14:17:52

+0

我相信我誤解了這個問題。 – karlphillip 2012-03-30 14:19:37

回答

3

通常,類定義通常位於.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中

2

在包含.h.c文件中的頭文件中沒有區別。
包含文件的內容只是複製粘貼到包含它的文件中。

+0

對於代碼擴展這是真實的,但由於標題經常被重複使用,包括另一個標題具有重大影響(編譯時,在全局命名空間中拉名字,...) – KillianDS 2012-03-30 14:24:07

+0

我有一個情況,其中包括一個.h文件.c文件而不是.h減少了編譯時間。實際的課程細節太複雜,不能在這裏寫,因爲我自己正在一小部分工作。因此,從編譯器的概念上來看,這是如何改變編譯時間的? – Romonov 2012-03-30 14:28:48

+0

以上評論已被回答。謝謝你的回答。 – Romonov 2012-03-30 14:37:55

0

#include "a.h"擴大爲a.h的內容。

如果#include "a.h"被置於b.h中,那麼a.h將在編譯期間被複制到b.h中。

如果#include "a.h"置於b.c,然後a.h將被編譯期間代替複製到b.c。把

0

.h文件在.c和.h文件的頂部編譯

之前,但.c文件分別編譯然後鏈接到吸氣劑,使可執行文件

1

如果你把include指令在你的頭文件,包含該頭文件的其他文件也將獲得包含的頭文件。

foo.h中:

#include "dependency.h" 

bar.h:

#include "foo.h" 

在這種情況下,bar.h既有foo.h中和dependency.h。

0

您可以包含.c文件 - 但按慣例您不能。

.h文件是用於聲明 - 即.c文件是定義和此.h文件將要執行此操作。它就像.h文件是烹飪書的內容,而.c文件是實際的食譜。

相關問題