スポンサードリンク
HOME > C言語 > 複数ファイルでの開発

C言語 - 複数ファイルでの開発

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);


ヘッダファイルとは言え、ただのテキストファイルなので、

使いようによっては、トリッキーな使い方も可能かと思います。



スポンサードリンク







HOME

言語解説編
プログラミング用語・知識

C言語

C++言語

Java

C#

Visual Basic.NET

アプリケーション編
C言語による
コンソールプログラミング




Copyright (C) プログラミングランド All Rights Reserved