コンパイルエラーを読む
エラーメッセージは敵ではありません
第 2 回で見たとおり、C はコンパイルの段階で書き方の誤りを見つけて止まります。このとき出るメッセージは英語で、初めて見ると身構えますが、書式は毎回同じです。読む順番さえ決めてしまえば、ほとんどの誤りは 1 分で直せます。
典型的なメッセージを見てください。
/*
main.c:4:41: error: expected ';' after expression
4 | printf("成績管理システム\n")
| ^
*/読み方は次のとおりです。
main.cは、誤りがあるファイルの名前です- 続く
4が 行番号、41が桁番号です。まずこの行を開きます errorはコンパイルが止まる致命的な誤り、warningは翻訳は通るが怪しい箇所です- そのうしろの英文が原因です。
expected ';'なら「セミコロンがあるはずの場所に無い」という意味です - 下に該当行が引用され、
^が問題の桁を指します
行番号は「気づいた場所」であって「原因の場所」ではない
いちばんの落とし穴がここです。コンパイラは上から順に読んでいって、辻褄が合わなくなった時点で報告します。セミコロンの付け忘れは、次の行まで読んで初めて分かるので、報告される行が実際に直すべき行の 1 つ下になる ことがよくあります。
ですから、指された行を見て何もおかしくないときは、必ず 1 行上を疑って ください。閉じカッコやコメントの */ の書き忘れでは、原因がもっと上にあることもあります。
上から 1 つずつ直す
エラーが 5 個並んでいても、慌てる必要はありません。1 個目の誤りのせいで、そのあとの解釈が全部ずれて、連鎖的に 4 個増えているだけ、ということがよくあります。
手順は、いちばん上のエラーを 1 つ直して、もう一度コンパイルする。これだけです。まとめて直そうとすると、直した場所と減ったエラーの対応が分からなくなります。
よく出る 2 つのメッセージ
1 つ目は expected ';' です。前の文のセミコロン忘れです。
2 つ目は call to undeclared function や use of undeclared identifier です。「その名前を知りません」という意味で、綴りの打ち間違いか、#include の書き忘れが原因です。C は大文字と小文字を区別するので、Printf も知らない名前として扱われます。親切なコンパイラは did you mean 'printf'? と候補まで出してくれます。
この学習画面では、コンパイラのメッセージがそのまま表示されます。今回は わざと壊したコード が置いてあります。まず提出してエラーを出し、行番号と英文を読んでから直してください。
要件
- コンパイルが通るようにする
- 1行目に 成績管理システム、2行目に 起動しました と表示する
- 誤りは2か所で、どちらもこの章で学んだ内容
入出力例
main("") → "成績管理システム
起動しました"