C言語では、1つのファイル内で全てのプログラムを書く事ができますが、
プログラムの規模が大きくなると、機能ごとに複数ファイルに分け、
複数人での開発が主となります。
例)
AさんとBさんが別々に開発し、Bさんが関数郡を作り、
AさんがBさんの作った関数郡を使うプログラムです。
Aさん担当:program1.c
#include <stdio.h>
void main(void) {
printf("足し算=%d\n", tasizan(10, 5));
printf("引き算=%d\n", hikizan(10, 5));
printf("かけ算=%d\n", kakezan(10, 5));
printf("わり算=%d\n", warizan(10, 5));
}
|
Bさん担当:program2.c
int tasizan(int a, int b);
int hikizan(int a, int b);
int kakezan(int a, int b);
int warizan(int a, int b);
int tasizan(int a, int b) {
return a + b;
}
int hikizan(int a, int b) {
return a - b;
}
int kakezan(int a, int b) {
return a * b;
}
int warizan(int a, int b) {
return a / b;
}
|
このままだと、Aさんのプログラムファイルでコンパイル警告かエラーが出ます。
tasizan, hikizan, kakezan, warizan 関数のプロトタイプ宣言がありませんから、
その関数が使えないワケです。
プロトタイプがないので、付け足してみます。
Aさん担当:program1.c
#include <stdio.h>
int tasizan(int a, int b);
int hikizan(int a, int b);
int kakezan(int a, int b);
int warizan(int a, int b);
void main(void) {
printf("足し算=%d\n", tasizan(10, 5));
printf("引き算=%d\n", hikizan(10, 5));
printf("かけ算=%d\n", kakezan(10, 5));
printf("わり算=%d\n", warizan(10, 5));
}
|
これなら、無事にコンパイルできます。
AさんのプログラムファイルとBさんのプログラムファイルには、
同じ関数のプロトタイプ宣言が記述されています。
もし、Bさんのプログラムで関数を1つ追加し、Aさんのプログラムから使いたい場合、
当然、AさんのプログラムコードにもBさんのプログラムコードにも修正が必要です。
今は2人での開発ですからそれほど大変ではありませんが、
数十人規模でのプログラム作成の場合、大変な修正量となります。
この手間をなくしてくれる機能が.h(ヘッダファイル)と呼ばれるファイルです。
ヘッダファイルは、基本的に1つのソースプログラムに対して1つ作成し、
そのソースプログラムで定義される関数のプロトタイプ宣言、記号定数、マクロなど
を書き、いろんなソースプログラムで#include命令により使用します。
上記のAさんBさんのプログラム例をヘッダファイルを使って修正してみます。
Aさん担当:program1.c
#include <stdio.h>
#include "program2.h"
void main(void) {
printf("足し算=%d\n", tasizan(10, 5));
printf("引き算=%d\n", hikizan(10, 5));
printf("かけ算=%d\n", kakezan(10, 5));
printf("わり算=%d\n", warizan(10, 5));
}
|
Bさん担当:program2.c
#include "program2.h"
int tasizan(int a, int b) {
return a + b;
}
int hikizan(int a, int b) {
return a - b;
}
int kakezan(int a, int b) {
return a * b;
}
int warizan(int a, int b) {
return a / b;
}
|
Bさん担当:program2.h
int tasizan(int a, int b);
int hikizan(int a, int b);
int kakezan(int a, int b);
int warizan(int a, int b);
|
ヘッダファイルとは言え、ただのテキストファイルなので、
使いようによっては、トリッキーな使い方も可能かと思います。
スポンサードリンク
|