画面いっぱいに赤い英語が出ると、初めての人はまず心が折れます。でも大丈夫です。あれは怒られているのではなく、手紙をもらっているのです。
エラーメッセージは、コンパイラという翻訳者からの報告書です。しかも「どこで」「何が」おかしいかまで書いてくれています。これほど親切な情報が、他にあるでしょうか。
読む場所は決まっている
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の親切
最後に一つ。コンパイルの段階で止まってくれるのは、幸運なことです。実行してから壊れるバグに比べれば、はるかに安全で、はるかに直しやすい。エラーは門前払いではなく、水際の検査なのです。