ヘッダファイルとソースファイルの関係
データ分離版ローグ・クローンIIのソースの構成は以下の様になっています。
-rw-r--r-- 1 user users 11k 9月 13日 1992年 rogue.h -rw-r--r-- 1 user users 17k 9月 14日 1992年 curses.c -rw-r--r-- 1 user users 7.4k 9月 14日 1992年 hit.c -rw-r--r-- 1 user users 11k 9月 14日 1992年 init.c -rw-r--r-- 1 user users 18k 9月 14日 1992年 invent.c -rw-r--r-- 1 user users 16k 9月 14日 1992年 level.c -rw-r--r-- 1 user users 23k 9月 14日 1992年 machdep.c -rw-r--r-- 1 user users 1.9k 9月 14日 1992年 main.c -rw-r--r-- 1 user users 10k 9月 14日 1992年 message.c -rw-r--r-- 1 user users 17k 9月 14日 1992年 monster.c -rw-r--r-- 1 user users 10k 9月 14日 1992年 move.c -rw-r--r-- 1 user users 16k 9月 14日 1992年 object.c -rw-r--r-- 1 user users 10k 9月 14日 1992年 pack.c -rw-r--r-- 1 user users 10k 9月 14日 1992年 play.c -rw-r--r-- 1 user users 25k 9月 14日 1992年 playmenu.c -rw-r--r-- 1 user users 1.6k 9月 14日 1992年 random.c -rw-r--r-- 1 user users 5.6k 9月 14日 1992年 ring.c -rw-r--r-- 1 user users 8.4k 9月 14日 1992年 room.c -rw-r--r-- 1 user users 12k 9月 14日 1992年 save.c -rw-r--r-- 1 user users 22k 9月 14日 1992年 score.c -rw-r--r-- 1 user users 10k 9月 14日 1992年 spechit.c -rw-r--r-- 1 user users 6.5k 9月 14日 1992年 throw.c -rw-r--r-- 1 user users 4.8k 9月 14日 1992年 trap.c -rw-r--r-- 1 user users 15k 9月 14日 1992年 use.c -rw-r--r-- 1 user users 5.8k 9月 14日 1992年 zap.c
一方、rogueclone2s のソースの構成は以下の様になっています。
-rw-r--r-- 1 user users 10k 7月 22日 04:02 rogue.h -rw-r--r-- 1 user users 5.2k 6月 18日 07:44 display.c -rw-r--r-- 1 user users 467 7月 22日 04:02 display.h -rw-r--r-- 1 user users 8.1k 7月 25日 00:56 hit.c -rw-r--r-- 1 user users 722 7月 25日 00:56 hit.h -rw-r--r-- 1 user users 9.9k 6月 18日 07:52 init.c -rw-r--r-- 1 user users 523 6月 18日 07:34 init.h -rw-r--r-- 1 user users 19k 6月 18日 07:52 invent.c -rw-r--r-- 1 user users 561 7月 22日 04:02 invent.h -rw-r--r-- 1 user users 17k 6月 18日 07:57 level.c -rw-r--r-- 1 user users 1.2k 7月 22日 04:02 level.h --以下略--
両方のリストを見比べると、データ分離版では rogue.h しかヘッダファイルがありません。
これは、 rogue.h がソースファイル全てのヘッダファイルになっているからです。
ソース内の最初のほうに、
#include "rogue.h"
となっている箇所がすべてのソースファイルにありますのでそれと分かります。
rogueclone2s ではソースファイルに対応してヘッダファイルがそれぞれ作成されています。
データ分離版を引継ぎヘッダファイルを一つにしなかった理由は、プロトタイプ宣言を意識したからです。
rogueclone2s のヘッダファイルには、対応するソースファイルのプロトタイプ宣言が書いてあります。
ヘッダにプロトタイプ宣言をまとめることで、標準ライブラリと同じ感覚で作成した関数を使用できるようになります。
つまり、 sin 関数を使いたいので math.h をインクルードするのと同じ感覚で、自分で作成した関数を使用できるのです。
このような統一的なアクセス方法の提供がソースコードの見やすさにつながると思い、ヘッダファイルをそれぞれ別にしました。
ただ、この方法も問題点があると思っています。
いろいろなファイルの関数を使用すると、 #include 文がどんどん増えていきます。
規模が大きいプロジェクトになると、おそらく #include だらけになってどのソースからどの関数を使っているか分かりにくくなり、破綻するのではないでしょうか。
プロジェクトの規模に応じて、ヘッダファイルの作成方法はよく検討しなければならないでしょう。