.hファイルと.cファイルのインクルードの違いは何ですか?たとえば、クラスAを持つファイルa.hとa.cがあります。クラスB(b.h、b.c)でクラスAを使用しています。含まれていることの違いは何ですか:012.html対b.cの違いは何ですか:.hファイルと.cファイルのインクルードの違い
#include "a.h"
.hファイルと.cファイルのインクルードの違いは何ですか?たとえば、クラスAを持つファイルa.hとa.cがあります。クラスB(b.h、b.c)でクラスAを使用しています。含まれていることの違いは何ですか:012.html対b.cの違いは何ですか:.hファイルと.cファイルのインクルードの違い
#include "a.h"
通常、クラス定義は通常.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に入れなければならない。
.h
または.c
ファイルにヘッダーファイルを含めても差異はありません。
インクルードファイルの内容は、インクルードしたファイルに貼り付けられたコピーだけです。
#include "a.h"
は、a.h
の内容に展開されます。
がb.h
にある場合は、a.h
が編集中にb.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
@karlphillip:どうしてですか? :) – sth
私は質問を誤解していると信じています。 – karlphillip