プログラムを直して、正しく動くようにすることをデバッグ(バグ取り、虫取り)といいます。翻訳時のエラーはほとんど文法的なもの、つまりプログラムが正しく書けて いるかどうかで発生します。その結果はエラーメッセージという形で表示されま すが、普通、始めての人にとってはたいへんわかりづらいものです。したがって、な るべくエラーが出ないように注意する必要があります。
C では、プログラムをコーディングする場合、1 行に1 文、 といった制限 はなく、文法に違反しない限り書式は自由に記述できます。 また、空白も不必要なものはすべて省くことができます。こうした自由さを フリーフォーマットといいますが、プログラマが記述しやすく、 また作成した後に読み返し やすいものにするためには、ある程度のルールにのっとって書く方が優れています。 読みやすいプログラムのコーディングを心がけることはエラーを少なくするば かりでなく、あとから読む他人のみならず自分にとっても重要な作法です。
}
」のあとに注意してください)
リンク時のエラーは、ほとんど、内部で使っている名前がちゃんと定義されて いるかどうかのチェックの際発生します。
実行時のエラーは一番対応が難しいものです。期待どおりに出力されないならま だよい方で、場合によると何も表示されず、計算機が止まってしまうこともあり ます。そうなると Windows や UNIX ならば自分のプログラムの実行を 殺します。MS-DOS や Mac だと、面倒ですが計算機をリセットしな ければなりません。こうした場合たいへん有効なテクニックは、まず、あらかじ めプログラムのほとんどの部分を /*...*/ や //...でコメントにして 実行することです。コメントにしてコンパイラから見えなくすることをコ メントアウトといいます。
例えば前出のプログラムの場合は、図1.3のように、クラス
の定義部分全部と main 関数の中身をすべてコメントアウトして実行すれば、
そのプログラムは必ず安全に動くはずです。ただし、何の出力も現れません。も
し動かなかったら、}
や「;」が正しく入っているか、コメントア
ウトされていないところだけでよいので、丁寧に探してください。
次に先のコメントアウトをすべて解除し、クラスの各メンバ関数の内容のみを
すべてコメントアウトして実行してみます。ただし、/* */ は入れ子(この中に
また /* */ を入れること)は許されていませんので気を付けてください。初
期化などはなされませんので正しい結果は出ないと思いますが、少なくとも
文法的に正しいかどうかは直ぐにわかります。何も出力されなくて不安ならば、
各メンバ関数中に cout << "pass Set()\n";
などといった出力文を入れ、
そこを無事に通過したことを出力させます。
これがうまくいったら、メンバ関数の中身を順にコメントから外しながら実行 していきます。こうした地道な努力の積み上げでプログラムは完成するのです。
本書のプログラムはいずれも短いものですから、すべて実行しながら読んで頂く とたいへん早く習得できます。また、ちょっと気になることがあったら、直ぐ短いプ ログラムを作って動作確認をし、文法上問題はないのか、エラーが出たらどう したら良いかをいろいろ試行錯誤してください。プログラミングはスポーツのよ うなもので、いくら頭で理解できても自分で書かないと絶対に習得できません。
問題4
あなたの計算機環境で、図1.2 のプログラム開発の流れに沿って問題2 のプログラムを作成し、実行してみましょう。うまく動かな
かったら、関数内をコメントアウトするなど本節で示した手法を駆使して何と
か動かしてみてください。