ヘッダファイルとソースファイルの関係

データ分離版ローグ・クローン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 だらけになってどのソースからどの関数を使っているか分かりにくくなり、破綻するのではないでしょうか。
プロジェクトの規模に応じて、ヘッダファイルの作成方法はよく検討しなければならないでしょう。