オリジナルのブログのリンク:
https://blog.csdn.net/khwkhwkhw/article/details/49798985?utm_source=app&from=timeline
はじめに:
私たちはしばしば、独自のヘッダファイルをインクルードするCプロジェクト、ソースファイルで見つかりました。すべてに沿って、私は理由を知りません。今、私は知っています。
前の知識:
私は、.Cファイルは、独自の.hファイルを含める必要はありません、と思います。.hファイルは、.cファイルで定義された関数およびグローバル変数の宣言を含んでいる、.hファイルが提供される外部インターフェイスファイル.cファイルです。.Cファイルへの必要は独自の.hファイルを(.hファイルは、内部、外部を備えていると、なぜそれが再び含まれなければならない)が含まれないようにします。.hファイルには、提供される外部インタフェースファイル.cファイルであるので、
この理解を考えると、私はプロジェクトの.cソースファイルは、独自の.hヘッダファイルが含まれているため、私はなぜ知らない理解していません。
今、この知識:
しかし、今、私は、ソースファイルは、独自のヘッダファイルが含まれている理由を知りたいです。
この本の言葉でセクション、下:
それは通常定義されています。「あなたは、コンパイラはその宣言を確認することができますしたい場合は、特定のヘッダファイルにグローバル宣言に入れなければならない、.cファイルで(、関数宣言である)外部関数のプロトタイプを置くことはありません一貫性を確認することができず、矛盾したプロトタイプ(で、関数宣言は)役に立たないよりも悪いです。」
注:プロトタイプの外部関数は、外部関数を宣言することです。
この一節の理解:
理由:「ネバーは、.Cファイルにプロトタイプ外部関数を入れて」
外部関数Aは、外部関数Aを用いたBCファイル、ファイルBcの外で定義された関数を指し、外部関数A(外部関数の宣言は、外部関数のプロトタイプである)を宣言する必要があります。この外部関数の文は、ファイルを達成するためにBcの内側に配置することができません。
一例として:
①プロジェクトは、2つのソースファイルACとBCがある場合は、ACヘッダファイルああ、BHのためのヘッダファイルBCを。
②a.cは、関数sumを定義します。
このsum関数を参照するために③b.c。アプローチは次のとおりです。DECLAREは紀元前にこの機能を合計します。BCあなたはSUM関数を使用することができます。
このアプローチは、過去に、BCの合計に外部関数を宣言することです。しかし、このようなアプローチは間違っています。
間違った理由:
合計がACに定義されている、と音がBCでクリアされ、sum関数の定義と宣言は、同じファイル内にありません。定義と宣言が同じファイル、コンパイル時ではなく、コンパイラがチェックされる適合性の定義と宣言することはできません。一貫性のない定義と宣言の合計は、コンパイラはそれをチェックアウトすることができない場合はこのように、それはコンパイル時にエラーがしません(定義と宣言は、同じファイルではありません)が、プログラムの実行が間違っている可能性があります。そして、このような間違いは、それを見つけるのは非常に簡単ではありません。
そこで、ちょうど言う:「.cファイルにプロトタイプ外部関数を置いてはいけません。」
どのようにそれは、コンパイラのチェック定義と宣言それの一貫性を作ることができますか?
.cファイルでプロトタイプ外部関数は、コンパイラが定義と宣言の整合性をチェックすることができない場合、私は(宣言と定義が同じファイルではありません)、以前に述べました。そのため、コンパイラのチェックにそれが自然に同じファイルで定義と宣言で定義と宣言の一貫性を聞かせて、そしてどのようにそれを定義し、同じドキュメント内宣言するには?
解答:ヘッダファイルの宣言に対応するソース・ファイルで定義された関数のソースファイルは、ソースファイルは、独自のヘッダファイルを含みます。このような定義と宣言は、同じファイルに配置されるだろう。
たとえば上に引用:交流機能の合計が規定され、および機能は、基本的に外部のsum関数を呼び出すことができる他のソースファイルです。そこで、我々は場所ああにSUM関数を宣言します。次に、交流ソースファイルはまた、ああファイルであり、独自のヘッダファイルを含んでいます。あなたが参照sum関数にしたいBCファイルは、それが直接ああファイルを含めることができます。
AC機能で合計を定義すると、文はああであるが、定義と宣言合計が交流で同じファイル内にあるので、交流のためには、ああ含まれています。このように、時にコンパイラは、SUM関数の定義と宣言の整合性をチェックするために行うことができ、そうでない場合、それはエラーになります。
他のソースファイル用としてではない直接のステートメントを介してではなく、ああヘッダファイルが含まれている方法により、外部関数の合計を参照します。
このように、コンパイラチェックサム関数定義と宣言の一貫性が与えられていない、それは和関数宣言は、ACを定義し、ああ和機能が同じであることを示しています。それまでに他のソースファイルは、関数sumを使用するように、ああ、直接含まれており、それはまた、関数の宣言と定義の和の一貫性を保証します。
結論
独自のヘッダファイルをインクルードしたいCソースファイルは、目的は、コンパイラが定義と宣言の整合性をチェックできるようにすることです。