トラック3・🔍人間がコンピュータになる訓練

エラーメッセージは敵ではない

読む目安 約12分・ゴール:エラーメッセージの構造を知り、英語のまま読んで対処できるようになる

アプリでこのトピックを学ぶ(無料・登録不要)

このトピックの要点

画面いっぱいに赤い英語が出ると、初めての人はまず心が折れます。でも大丈夫です。あれは怒られているのではなく、手紙をもらっているのです。

エラーメッセージは、コンパイラという翻訳者からの報告書です。しかも「どこで」「何が」おかしいかまで書いてくれています。これほど親切な情報が、他にあるでしょうか。

読む場所は決まっている

hello.c: In function 'main':
hello.c:5:15: error: expected ';' before '}' token
    5 |     int a = 3
      |               ^

形式はほぼ共通です。

読む順番は、行番号 → 種類 → 内容です。英文全体を訳そうとせず、この3つだけ拾ってください。

ビット全部読まなくていいんだ。まず数字を見る。それだけで半分解決だよ。

頻出単語はせいぜい10個

出てくる英単語はほぼ固定です。これだけ知っていれば戦えます。

1つ目だけ直す

最重要のコツです。エラーが30個出ても、いちばん上の1個だけ直して、もう一度コンパイルしてください。

コンパイラは、1つ目で混乱したまま読み進めるので、後続のエラーはその巻き添えであることがほとんどです。セミコロン1個の書き忘れで20個のエラーが出るのは、日常茶飯事です。上から順に、1個ずつ。これで数は勝手に減ります。

行番号は「気づいた場所」であって「原因の場所」ではない

もう一つ大事な性質です。5行目にエラーと出ていても、原因は4行目の書き忘れであることがよくあります。コンパイラは、読み進めて矛盾に気づいた場所を報告するからです。指定された行で何も見つからなければ、1つ上の行を見る。これで多くが解決します。

エラーが出るのは、Cの親切

最後に一つ。コンパイルの段階で止まってくれるのは、幸運なことです。実行してから壊れるバグに比べれば、はるかに安全で、はるかに直しやすい。エラーは門前払いではなく、水際の検査なのです。

アプリでこのトピックを学ぶ(無料・登録不要)

確認問題

確認問題 1

次のエラーメッセージから読み取れることとして、正しいものはどれでしょう。

hello.c:5:15: error: expected ';' before '}' token
  1. hello.c の5行目あたりで、} の前にセミコロンが足りないと言われている
  2. hello.c に15個のエラーが含まれている
  3. 5行目を削除すれば必ず直る
  4. 警告なので、そのまま実行しても問題ない
答えを見る

正解:A(hello.c の5行目あたりで、} の前にセミコロンが足りないと言われている)

形式は「ファイル名:行:桁: 種類: 内容」です。5:15 は5行目の15文字目、error は止まる種類(warning なら動くが危ない)、expected ';' は「セミコロンがあるはずなのに無い」という意味。読むのは行番号→種類→内容の3つだけで十分です。なお、指定された行に問題が見つからないときは、1つ上の行を疑ってください。

確認問題 2

コンパイルしたら、エラーが30個も表示されました。まず何をすべきでしょう。

  1. いちばん下のエラーから順に直していく
  2. いちばん上のエラー1つだけを直して、もう一度コンパイルする
  3. 30個すべてを直してから、まとめてコンパイルする
  4. エラーが多すぎるので、最初から書き直す
答えを見る

正解:B(いちばん上のエラー1つだけを直して、もう一度コンパイルする)

コンパイラは最初の誤りで混乱したまま読み進めるので、後続のエラーはその巻き添えであることがほとんどです。セミコロン1個の書き忘れで20個のエラーが出るのは日常茶飯事。上から1個ずつ直して再コンパイルすれば、数は勝手に減っていきます。

「人間がコンピュータになる訓練」の目次

  1. トレース表とは——実行を目で見る道具
  2. 代入をトレースする
  3. 分岐をトレースする
  4. ループをトレースする
  5. バグを見つける思考法——仮説と検証
  6. ラバーダック・デバッグ
  7. エラーメッセージは敵ではない
  8. 総仕上げ——紙上プログラム実行

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版の販売ページは準備中です。

ほかのトラック

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版