これまでプログラムを記述する時には、エディタのウィンドウに書き込んできましたが、
その時、常に1つの画面の中に全てのプログラムを記述してきました。
つまり、1つのファイルの中に全てのプログラムを記述してきたことを意味します。
この方法は単純なので、規模の小さなプログラムでは有効な方法です。
しかし、規模が大きなプログラムでは、1つのファイルに全てを書き込んでいると、
どこにどのプログラムがあるのかがわかりにくくなります。
更に、何人かで1つのプログラムを作ろうとする場合には、
1つのファイルに2人以上の人が同時に書き込むことは基本的に不可能なので、
2人以上でのプログラミングは事実上不可能になってしまいます。
この問題の解決には、複数のファイルに分割してプログラムを書く必要があります。
複数のファイルに分割することで、どこにどのプログラムがあるのかわかりやすくなり、
また、何人かで1つのプログラムを作ることも可能になります。
プログラムを複数のファイルに分割するとなるとなにやら難しそうですが、
実は、最初から無意識の内に分割してプログラムを作っていたのです。
printf関数などを使うには、#include <stdio.h> を先頭に記述する必要がありました。
実は、これこそがプログラムを複数のファイルに分割するということです。
#include疑似命令は、指定されたファイルの内容を取り込むという命令です。
そして、stdio.h は、printf関数などの様々な関数の宣言を含んでいます。
ここで重要なことは、stdio.h には、printf関数の宣言だけが書かれているだけであり、
実際のプログラムは、stdio.h の中には書かれていないと言うことです。
printf関数の実際のプログラムは、stdio.h とは別のファイルに記述されています。
stdio.h のような、宣言だけが書かれたファイルをヘッダーファイルと呼びます。
ヘッダーファイルには、拡張子として、.h をつけることが慣習となっています。
これに対して、実際にプログラムを記述するファイルをソースファイルと呼びます。
[ ヘッダーファイル ]
関数や変数の宣言のみが記述されたファイル。
拡張子は .h にすることが慣習となっている。
ソースファイルとヘッダーファイルは、通常、1対1で対応するように作成します。
[ ソースファイル ]
プログラムが記述されたファイル。
拡張子は .c にすることが慣習となっている。
前項では、ヘッダーファイルの意味について説明しました。
ここでは、実際に最低限の構成でヘッダーファイルとソースファイルを作成し、
第11章で作成したsum関数を分割してみたいと思います。
まずは、sum関数を含むソースファイル、sum.cを作成してみます。
これは簡単なことで、第11章で作成したsum関数をコピーするだけです。
次に、sum.c 内に含まれる関数を他のソースファイルから使えるようにするために、/* sum.c */ int sum(int min,int max) { int num; num = (min + max) * (max - min + 1) / 2; return num; }
これで、sum関数の分割は完了しました。/* sum.h */ int sum(int min,int max);
main.c の記述もほとんど第11章と同じですが、1つ異なる点があります。
今回、sum関数のプロトタイプ宣言は、sum.h に記述しているので、
sum.h を取り込まない限り、sum関数を使うことが出来ません。
sum.h を取り込むのには、当然、#include疑似命令を使用します。
ただし、今まではヘッダーファイル名を <> で囲んでいたのですが、
自分で作成したヘッダーファイルを取り込むには、"" で囲むことになっています。
なお、#include疑似命令でヘッダーファイルを取り込むことを、インクルードと言います。
[ インクルード ]
#include疑似命令でヘッダーファイルを取り込むこと。
これで、main.c も完成です。/* main.c */ #include <stdio.h> #include "sum.h" int main(void) { int value; value = sum(50,100); printf("%d\n",value); return 0; }
なお、main.c のヘッダーファイル、main.h は作成する必要はありません。
main.c 内に含まれる関数を他のソースファイルから使う必要はないからです。
さて、早速コンパイルして実行してみたいのですが、このままではコンパイル出来ません。
今まではエディタの機能によって、1つのファイルであれば自動的に指定されたのですが、
2つ以上のファイルを使う場合には、使うファイルを指定する必要があります。
設定は使用しているコンパイラによって多少異なります。
Borland C++ Compiler と Visual C++ Toolkit 2003 の設定
メニュー -> 実行 -> コンパイル時パラメータ を選択し、
コンパイル時パラメータの欄に、
-emain main.c sum.cと打ち込みます。
-emain とは、実行ファイルを main.exe と言う名前で作成させる命令です。
後半の2つは、共にコンパイルするソースファイル名を指定しています。
ヘッダーファイルはソースファイルでインクルードしているので不要です。
LSI C-86 の設定設定を終えたら、早速コンパイルしてみます。
メニュー -> 実行 -> コンパイル時パラメータ を選択し、
コンパイル時パラメータの欄に、
-o main.exe main.c sum.cと打ち込みます。
-o main.exe とは、実行ファイルを main.exe と言う名前で作成させる命令です。
後半の2つは、共にコンパイルするソースファイル名を指定しています。
ヘッダーファイルはソースファイルでインクルードしているので不要です。
[ stdio.hの時は設定不要 ]
今までにも、stdio.h などにより無意識の内に複数ファイルに分割していたのですが、
その時は、コンパイラが自動的に設定していたので、
今回のように他のファイルを指定する必要などはありませんでした。
この様に別のファイルに分けておくようにすれば、sum関数を直接書き込まなくても、
[ 本格的なエディタでは ]
今回は、わざわざファイルを指定してコンパイルさせていますが、
本格的な(プロ仕様)開発用エディタを使用すると、全自動的で行ってくれます。
他にも様々な機能が付属しており至れり尽くせりで、とても快適です。
Windows用のプログラム開発用エディタでは、マイクロソフト社製の VisualC++ が定番です。
学割なら1万円を切る価格で購入出来るので、真面目に学習したい人は検討して良いでしょう。