🔍 人間がコンピュータになる訓練
🎯 エラーメッセージの構造を知り、英語のまま読んで対処できるようになる
画面いっぱいに赤い英語が出ると、初めての人はまず心が折れます。でも大丈夫です。あれは怒られているのではなく、手紙をもらっているのです。
エラーメッセージは、コンパイラという翻訳者からの報告書です。しかも「どこで」「何が」おかしいかまで書いてくれています。これほど親切な情報が、他にあるでしょうか。
読む場所は決まっている
hello.c: In function 'main':
hello.c:5:15: error: expected ';' before '}' token
5 | int a = 3
| ^形式はほぼ共通です。
hello.c — どのファイルか5:15 — 5行目の15文字目(ここが最重要)error: — 種類。error は止まる、warning は動くが危ないexpected ';' before '}' token — 内容。「} の前にセミコロンが要る」読む順番は、行番号 → 種類 → 内容です。英文全体を訳そうとせず、この3つだけ拾ってください。
頻出単語はせいぜい10個
出てくる英単語はほぼ固定です。これだけ知っていれば戦えます。
expected 〜 — 「〜があるはずなのに無い」(記号の書き忘れ)undeclared / not declared — 「そんな名前は宣言されていない」(打ち間違い・宣言忘れ)undefined reference to 〜 — 「〜の中身が見つからない」(リンク段階の問題)implicit declaration of function 〜 — 「#include 忘れ」の定番warning: unused variable — 「使っていない変数がある」too few arguments — 「引数の数が足りない」assignment — 代入、comparison — 比較1つ目だけ直す
最重要のコツです。エラーが30個出ても、いちばん上の1個だけ直して、もう一度コンパイルしてください。
コンパイラは、1つ目で混乱したまま読み進めるので、後続のエラーはその巻き添えであることがほとんどです。セミコロン1個の書き忘れで20個のエラーが出るのは、日常茶飯事です。上から順に、1個ずつ。これで数は勝手に減ります。
行番号は「気づいた場所」であって「原因の場所」ではない
もう一つ大事な性質です。5行目にエラーと出ていても、原因は4行目の書き忘れであることがよくあります。コンパイラは、読み進めて矛盾に気づいた場所を報告するからです。指定された行で何も見つからなければ、1つ上の行を見る。これで多くが解決します。
エラーが出るのは、Cの親切
最後に一つ。コンパイルの段階で止まってくれるのは、幸運なことです。実行してから壊れるバグに比べれば、はるかに安全で、はるかに直しやすい。エラーは門前払いではなく、水際の検査なのです。
プログラムの何が・どこで間違っているかを、コンパイラや実行環境が知らせてくれる文章のこと。読めば直し方のヒントが詰まっている味方。英語で書かれていることが多いが、落ち着いて読めば重要な情報が含まれている。
ソースコードを機械語に変換するソフトウェア。文法チェックも同時に行い、間違いがあればコンパイルエラーとして知らせてくれる翻訳者兼校正者にあたる。gccやclangなど、C言語向けのコンパイラにはいくつかの種類がある。
ソースコードをコンピュータが直接実行できる機械語に変換する作業。翻訳者が人間の言葉を機械の言葉に訳してくれる工程だとイメージすると分かりやすい。この工程を経なければ、書いたコードはコンピュータの上でまったく動かせない。
プログラムに含まれる誤りのこと。意図した動きと実際の動きがずれている状態を指し、プログラミングにつきものの現象として扱われる。「虫」を意味する言葉が由来とされ、古くから使われてきたプログラミング用語。
もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。