C ++のヘッダーファイルとソースファイルの詳細な説明
1。C++コンパイルモード
一般に、C ++プログラムには、.cppファイルと.hファイルの2種類のファイルのみがあります。その中で、.cppファイルはC ++ソースファイルと呼ばれ、C ++のソースコードが配置されます。 .hファイルはC ++ヘッダーファイルと呼ばれ、C ++のソースコードが配置されます。
C ++言語は「個別のコンピレーション」をサポートしています。言い換えれば、プログラムのすべての内容は異なる部分に分割し、異なる.cppファイルに配置できます。 .cppファイルのものは比較的独立しています。コンパイル(コンパイル)の場合、他のファイルと通信する必要はありません。ターゲットファイルにコンパイルした後、他のターゲットファイルとのみリンクする必要があります。たとえば、グローバル関数「void a(){}」はファイルa.cppで定義されており、この関数はファイルb.cppで呼び出す必要があります。それでも、ファイルA.CPPとB.CPPは、お互いの存在を知る必要はありませんが、個別にコンパイルすることができます。それらをターゲットファイルにコンパイルした後、リンクすると、プログラム全体を実行できます。
これはどのように達成されますか?執筆プログラムの観点から見ると、非常に簡単です。 file b.cppで、「void a()」関数を呼び出す前に、関数「void a();」を宣言します。初め。これは、コンパイラがb.cppをコンパイルするときにシンボルテーブルを生成するためです。見られない「void a()」のようなシンボルは、このテーブルに保存されます。もう一度リンクすると、コンパイラは他のオブジェクトファイルでこのシンボルの定義を探します。見つかったら、プログラムをスムーズに生成できます。
ここに言及されている2つの概念があり、1つは「定義」であり、もう1つは「宣言」であることに注意してください。簡単に言えば、「定義」とは、シンボルを完全かつ完全な方法で記述することを意味します。変数であろうと関数であろうと、どのタイプであるか、必要なパラメーターなどを意味します。「宣言」は、このシンボルの存在を宣言するだけです。つまり、このシンボルが他のファイルで定義されていることをコンパイラに伝えます。最初に使用します。リンクするときは、別の場所に行ってそれが何であるかを見つけてください。定義するときは、C ++構文に従って記号(変数または関数)を完全に定義する必要があり、宣言する場合は、このシンボルのプロトタイプを書くだけです。シンボルはプログラム全体で複数回宣言できるが、一度だけ定義する必要があることに注意する必要があります。シンボルの2つの異なる定義がある場合、コンパイラが誰を聞くべきかを想像してください。
このメカニズムは、C ++プログラマーに多くの利点をもたらし、プログラムを作成する方法にもつながります。プログラム全体の多くの.cppファイルで呼び出される非常に一般的に使用される関数「void f(){}」がある場合、この関数を1つのファイルに定義し、他のファイルでこの関数を宣言する必要があることを考えてください。関数は簡単に対処でき、それを宣言するための1つの文だけを意味します。ただし、数学的な関数の束など、機能が多すぎたら、何百もの機能がありますか?すべてのプログラマーは、すべての機能をそれらの形で正確に書き留めて書き留めることができますか?
2。ヘッダーファイルとは何ですか
明らかに、答えは不可能です。しかし、プログラマーが非常に多くの関数プロトタイプを覚えておくというトラブルを救うのに役立つ非常に簡単な方法があります。最初に何百もの機能のすべての宣言ステートメントを書いて、それらをファイルに入れることができます。プログラマーがそれらを必要とする場合は、これらすべてをソースコードにコピーします。