コンパイル・リンクがようやく通るようになった。大量のエラーの原因だがヘッダーファイルにあるグローバル変数にexternキーワードを付け忘れていたからだった。いやーもうグローバル変数なんてほとんど使ってないから完全に忘れてしまっていた。「C言語の正しいヘッダファイルの書き方」に書いてあることがほぼ今回のエラーの原因であった。あとは下の前方宣言とやらである。
先ほども書きましたが、関数のプロトタイプは比較的新しい仕様です 実は、それ以前にも戻り値のデータ型をコンパイラに知らせるために前方宣言というものがありました これは、プロトタイプの引数がない宣言です 戻り値の型 関数名(); 過去の言語との互換性を考慮して、現代の新しいコンパイラにも実装されています しかし、前章のプログラムのようなプロトタイプの無い関数や前方宣言は使われないです すべてのC言語プログラムには必ず関数のプロトタイプを宣言して関数を扱うべきであるとされます関数のプロトタイプ
まあこの通りの宣言が.cファイルに記述されていた。かなり古いソースコードだからこのような記述も残っているのだ。このあたりはすべて削除して、引数付のプロトタイプ宣言としてヘッダーファイルにまとめてしまったが。
あとはこれも古いプログラムのせいと思われるが、関数名・変数名がすごく短い。一目見ただけでは何をする関数なのかよくわからない。ひょっとするとX68KのCコンパイラの仕様があまり長い変数名が使えないとかそんな理由かもしれない。まあ一人で作れば見やすさなんて関係ないのでこれでもよいと思うけども。
コンパイル・リンクは通ったけれども、実行してみると例外で落ちた。原因究明しないとね。。