8行目の最後のセミコロン「;」が抜けている. このプログラム(bad.cとしよう)をコンパイルしたときの エラーメッセージはこんな感じ:#include <stdio.h> #include <stdlib.h> int main(void); int main(void) { char buffer[256] int x; gets(buffer); x = atoi(buffer); }
最初の行は, bad.c というファイルの中の, 関数 main の定義の中で エラーがあったことを示している. 2行目は今回は無視して, 3行目が,bad.c: In function 'main': bad.c:9: error: nested functions are disabled, use -fnested-functions to re-enable bad.c:9: error: syntax error before 'int' bad.c:11: error: 'buffer' undeclared (first use in this function) bad.c:11: error: (Each undeclared identifier is reported only once bad.c:11: error: for each function it appears in.) bad.c:12: error: 'x' undeclared (first use in this function)
bad.cの9行目の, 「int」の直前に, 文法上の誤り(syntax error)があるというエラーメッセージである. 9行目は「int x;」という行で, とくに誤りはない. しかも int の直前にはなにもない. 真相は, 8行目のセミコロンが抜けているため, 8行目が9行目に続いているとされ, 本来ならセミコロンのあるべき場所に int があったので エラーが発覚したということである.
このように, エラーメッセージに示されている行番号は, かならずしもエラーのあった行を示しているとは限らず, その前の行に原因があることが多い.
11行目以降に関するエラーメッセージは, 最初のエラーから派生したエラーで, x や buffer の宣言がセミコロン抜けのために無視された結果, 宣言されていないことになったということ. セミコロン抜けを修正すれば, このエラーも消えるはず.
このように, 文法上のエラーは最初の誤りが原因で複数のメッセージが 出ることもあるので, まず最初の誤りを直してからコンパイルしなおすのが いいだろう
変数 x の宣言を忘れている. エラーメッセージはこんな感じ:#include <stdio.h> #include <stdlib.h> int main(void); int main(void) { char buffer[256]; gets(buffer); x = atoi(buffer); }
エラーメッセージの2行目が重要で, プログラムの11行目で, 未宣言の変数 x が使われている, と指摘している. 変数宣言は variable declarationというので, undeclared とは「宣言してない」ということ.bad2.c: In function 'main': bad2.c:11: error: 'x' undeclared (first use in this function) bad2.c:11: error: (Each undeclared identifier is reported only once bad2.c:11: error: for each function it appears in.)