2012-03-30 19 views
1

.hファイルと.cファイルのインクルードの違いは何ですか?たとえば、クラスAを持つファイルa.hとa.cがあります。クラスB(b.h、b.c)でクラスAを使用しています。含まれていることの違いは何ですか:012.html対b.cの違いは何ですか:.hファイルと.cファイルのインクルードの違い

#include "a.h" 

+0

.cファイルは含めることができない=) – karlphillip

+5

@karlphillip:どうしてですか? :) – sth

+0

私は質問を誤解していると信じています。 – karlphillip

答えて

3

通常、クラス定義は通常.hファイルにあり、実装は.c(pp)ファイルにあります。

b.hファイルではなく、b.cファイルで#include "a.h"を実行する利点の1つは、a.hが変更されたときにb.cだけでなく、b.hを含む他のファイルも再コンパイルされることです。

また、Bの実装の詳細をb.hを使用するすべての人に公開する必要はありません。アイデアは、b.hには、クラスBを使用している人にとって興味のない追加の情報が含まれてはならないということです(秘密ではありませんが、気にしないので気にしないためです)。

b.hを含む誰も強制的に他の.hファイルを間接的に(b.hに#includeされているので)含める必要はありません。混乱を避ける。

可能であれば、b.cの#include "a.h"に可能な限りお勧めします。

しかし、これは必ずしも可能ではありません。あなたがBの中でAを使っているだけで、Bへの参照がないなら、それは問題ありません。また、BHた場合にのみ(すなわちメンバー、関数の引数や戻り値として)が、ありません「タイプ依存」の参照、あなたはまた、BHでこれだけを入れることができますへのポインタが含まれています

class A; 

そして、まだ自分の中で#include "a.h"を保ちます紀元前しかし、a.hにもっと多くの参照や依存関係がある場合、b.hを含む誰もが本当にできなかった場合、#include "a.h"はb.hに入れなければならない。

2

.hまたは.cファイルにヘッダーファイルを含めても差異はありません。
インクルードファイルの内容は、インクルードしたファイルに貼り付けられたコピーだけです。

+0

コードを展開するにはこれが当てはまりますが、ヘッダーが頻繁に再利用されるため、別のヘッダーに重大な影響があります(コンパイル時にグローバル名前空間で名前を取得するなど) – KillianDS

+0

.hファイルを.hファイルの代わりに.cファイルを使用すると、コンパイル時間が短縮されます。実際のクラスの詳細はあまりに複雑すぎてここに書き込むことはできません。だから概念的には/コンパイラの視点、これはどのようにコンパイル時間を変更するのだろうか? – Romonov

+0

上記のコメントが回答されました。あなたの答えもありがとう。 – Romonov

0

#include "a.h"は、a.hの内容に展開されます。

b.hにある場合は、a.hが編集中にb.hにコピーされます。

b.cにある場合、a.hは、代わりにb.cにコピーされます。

0

.hファイルは、前

をコンパイルした.cまたは.hファイルの先頭に置くが、.cファイルは、個別にコンパイルし、あなたのヘッダーにincludeディレクティブを置く場合は、実行可能ファイル

1

を作るためにゲッタリングするリンクそのヘッダファイルを含む他のファイルもインクルードヘッダを取得します。

foo.hという:

#include "dependency.h" 

bar.h:この場合

#include "foo.h" 

、bar.hはfoo.hというとdependency.h両方を有します。

0

ファイルには.cを含めることができますが、慣例ではそうしません。

.hファイルは宣言用です。すなわち、.cファイルが定義であり、この.hファイルがこれを行うことになります。調理本の内容は.hファイルのようで、.cファイルが実際のレシピです。

関連する問題