next up previous contents index
Next: Index Up:  C++ 言語とプログラミングの基礎 Previous: プログラム開発の手順   Contents   Index

見やすいプログラミングとデバッグ

プログラムを直して、正しく動くようにすることをデバッグ(バグ取り、虫取り)といいます。翻訳時のエラーはほとんど文法的なもの、つまりプログラムが正しく書けて いるかどうかで発生します。その結果はエラーメッセージという形で表示されま すが、普通、始めての人にとってはたいへんわかりづらいものです。したがって、な るべくエラーが出ないように注意する必要があります。

C では、プログラムをコーディングする場合、1 行に1 文、 といった制限 はなく、文法に違反しない限り書式は自由に記述できます。 また、空白も不必要なものはすべて省くことができます。こうした自由さを フリーフォーマットといいますが、プログラマが記述しやすく、 また作成した後に読み返し やすいものにするためには、ある程度のルールにのっとって書く方が優れています。 読みやすいプログラムのコーディングを心がけることはエラーを少なくするば かりでなく、あとから読む他人のみならず自分にとっても重要な作法です。

  1. 識別子と演算子、括弧やコンマ等の区切り記号との間には適当な空白を適 宜挿入して見やすくする。
  2. 実行文の中でも処理単位ごとに適宜空白行を挿入して、その境界を明ら かにする。
  3. while、if の条件に続く文は \fbox{TAB} キー等で右側に何カラム か字下げ(インデント)して文の構造を明らかにする。
これらについては、本書のプログラムを参考にして自分なりにわかりやすい書 き方を習得してください。それでもエラーが出る場合には、エラーの出た行数 を参考にしながら、次の点を調べてみてください。
  1. 標識子の名前が正しいか
  2. 括弧が正しく閉じられているか
  3. 「;」 が必要なところにあるか(特に class 定義文の最後 の「}」のあとに注意してください)
  4. 引数のない関数でも ( ) が付いているか

リンク時のエラーは、ほとんど、内部で使っている名前がちゃんと定義されて いるかどうかのチェックの際発生します。

  1. 変数が正しく宣言されているか、誤った変数名を使っていないか
  2. 関数が正しく宣言されているか、誤った関数名を使っていないか
  3. cout « ... などの組込み関数を使った場合、#include で必要な ヘッダファイルが挿入されているかどうか
などに気を付けてください。

実行時のエラーは一番対応が難しいものです。期待どおりに出力されないならま だよい方で、場合によると何も表示されず、計算機が止まってしまうこともあり ます。そうなると Windows や UNIX ならば自分のプログラムの実行を 殺します。MS-DOS や Mac だと、面倒ですが計算機をリセットしな ければなりません。こうした場合たいへん有効なテクニックは、まず、あらかじ めプログラムのほとんどの部分を /*...*/ や //...でコメントにして 実行することです。コメントにしてコンパイラから見えなくすることをコ メントアウトといいます。

例えば前出のプログラムの場合は、図1.3のように、クラス の定義部分全部と main 関数の中身をすべてコメントアウトして実行すれば、 そのプログラムは必ず安全に動くはずです。ただし、何の出力も現れません。も し動かなかったら、}や「;」が正しく入っているか、コメントア ウトされていないところだけでよいので、丁寧に探してください。

Figure 1.3: コメントアウトによるプログラムのデバッグ
\begin{figure}%
\begin{small}
\begin{screen}
\begin{verbatim}class CCalc {
/...
... return 0;
}\end{verbatim}
\end{screen}\end{small}\vspace{-1.5em}\end{figure}

次に先のコメントアウトをすべて解除し、クラスの各メンバ関数の内容のみを すべてコメントアウトして実行してみます。ただし、/* */ は入れ子(この中に また /* */ を入れること)は許されていませんので気を付けてください。初 期化などはなされませんので正しい結果は出ないと思いますが、少なくとも 文法的に正しいかどうかは直ぐにわかります。何も出力されなくて不安ならば、 各メンバ関数中に cout << "pass Set()\n"; などといった出力文を入れ、 そこを無事に通過したことを出力させます。

これがうまくいったら、メンバ関数の中身を順にコメントから外しながら実行 していきます。こうした地道な努力の積み上げでプログラムは完成するのです。

本書のプログラムはいずれも短いものですから、すべて実行しながら読んで頂く とたいへん早く習得できます。また、ちょっと気になることがあったら、直ぐ短いプ ログラムを作って動作確認をし、文法上問題はないのか、エラーが出たらどう したら良いかをいろいろ試行錯誤してください。プログラミングはスポーツのよ うなもので、いくら頭で理解できても自分で書かないと絶対に習得できません。


問題4   あなたの計算機環境で、図1.2 のプログラム開発の流れに沿って問題2 のプログラムを作成し、実行してみましょう。うまく動かな かったら、関数内をコメントアウトするなど本節で示した手法を駆使して何と か動かしてみてください。


next up previous contents index
Next: Index Up:  C++ 言語とプログラミングの基礎 Previous: プログラム開発の手順   Contents   Index
Yoichi OKABE 2006-05-20