Teaprog.com

とあるエンジニアの日々の記録。エンジニアと関係のないようなことも書きます。

C言語における分担開発のやり方

内容

 

C言語におけるコーディングの複数ファイルへの分担のやり方について簡単に書いてみようと思います。

 

 説明に使用するプログラムの例を下に示します。

 

 test.c

#include <stdio.h>

int main (){
   printf("test1\n");
   printf("test2\n");
   return 0;
}

 

f:id:tk0137:20210531155129j:plain

 

とても簡単ではありますが、上のプログラムは標準出力で”test1”、”test2”という文字列を2行で表示するプログラムです。

 

 実行結果

 

f:id:tk0137:20210531155602j:plain

 

実際、もっと複雑なコード、ゲームを作成したりするときなどはコードの量が多く、1人では現実的な時間で書ききれなくなる場合が出てくるかもしれません。

 

そのとき、複数人で分担したプログラム後で統合することができます。

 

ここでもう一度上で示した「test.c」のプログラムに戻ります。

 

main関数の中でprintf関数を2回使用しています。

 

この2つのprintf関数の1つを1人、もう一方を1人に分担させるという想定でプログラムを書いてみようと思います。

 

「test1.c」「test2.c」に分け、統合先を「test2.c」とします。

 

各プログラムの役割は以下の通りです。

 

  • test1.c
  •  標準出力で1行で"test1"と画面に表示する。「test2.c」へ統合する。
  • test2.c
  •  標準出力で1行で"test2"と画面に表示する。「test1.c」の統合先。

 

まず「test1.c」の方は以下のように書きます。

 test1.c

#include <stdio.h>

void test1(){
   printf("test1\n");
}

 

f:id:tk0137:20210531165930j:plain

 

冒頭に挙げた「test.c」との1番の違いは、main関数がないことです。

 

つまりこの「test1.c」単体ではプログラムが動きません。

 

統合先の「test2.c」のmain関数で動かすので、ここではvoid関数の「test1」を定義しています。

 

そしてプログラムの要である統合先の「test2.c」 は以下のように書きます。

 

 test2.c

#include <stdio.h>
#include "test1.c" int main(){
test1();
printf("test2\n");
return 0;
}

 

f:id:tk0137:20210601181419p:plain

 

includeでstdio.hをインクルードするのはC言語では呪文のように冒頭に書きますが、その1行下に先ほど作成した「test1.c」をインクルードします。

 

ここで注意しなければならないのが、stdio.hをインクルードするときは<>で囲みますが、同じディレクトリ下のファイルをインクルードするときは""(ダブルクォーテーション)で囲みます。

 

この状態で「test2.c」をコンパイルし、実行してみます。

 

f:id:tk0137:20210601192926p:plain

 

1行目に"test1"、2行目に"test2"と表示されました。

 

つまり、1行目は実行した「test2.c」とは違うファイルである「test1.c」内の関数を実行しています。

 

このように複数の機能を他のファイルに分担して、完成した後に機能を1つのプログラムに集約することができました。

 

まとめ

①「test.c」で実行した2つのprintf関数のうち1つを「test1.c」にコーディング

②「test2.c」にもう1つをコーディング。

③「test2.c」に「test1.c」をインクルードして「test1.c」に定義した関数を実行するようにコーディング。

④「test2.c」を実行すると「test.c」と同じように結果が出た。

 

本当はもっと複雑なコードに対して分担させるという使い方をするので、実用的というよりはこういう仕組みがあるという認識でいた方が良いかもしれません。

 

簡単でしたが、以上です。

 

ありがとうございました。