Code Fix

初級

error: expected declaration or statement at end of input の原因と直し方

波括弧{}の対応が崩れ、閉じ忘れがあるときに出るエラーです。ファイルの終わりまで読んでもブロックが閉じられないため、末尾でエラーになります。

エラーメッセージの読み方

main.c:5:5: error: expected declaration or statement at end of input
main.c
ファイル名
5
行番号
5
列番号 — この位置でgccが構文解析に失敗しました
expected declaration or statement at end of input
内容 — 期待していたもの、または受け付けられなかったもの

このエラーが出る典型パターン

パターン1

 1  #include <stdio.h>
 2  
 3  int main(void) {
 4      printf("hi\n");
 5      return 0;
 6   
    ^
main.c:5:5: error: expected declaration or statement at end of input

main関数を開いた{を閉じ忘れています。ファイルの終わりまで読んでもブロックが閉じないため、末尾でエラーになります。

直し方: (空)} にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  #include <stdio.h>
 2  
 3  int main(void) {
 4      int x = 5;
 5      if (x > 0) {
 6          printf("positive\n");
 7       
        ^
 8      return 0;
 9  }
main.c:9:1: error: expected declaration or statement at end of input

if文の{を閉じないと、それ以降の行がすべてif文の中に取り込まれてしまい、最後の}がmain関数ではなくif文を閉じることになります。結果としてmain関数自体が閉じられないままファイルが終わります。

直し方: (空)} にします。

この問題を解いてみる →

パターン3

 1  #include <stdio.h>
 2  
 3  int main(void) {
 4      for (int i = 0; i < 3; i++) {
 5          printf("%d\n", i);
 6       
        ^
 7      return 0;
 8  }
main.c:8:1: error: expected declaration or statement at end of input

for文も同じ罠があります。ループの{を閉じ忘れると、後続のコードがすべてループの中身として解釈されます。

直し方: (空)} にします。

この問題を解いてみる →

よくある誤解

エラーは必ずファイルの最後の行を指しますが、実際に直すべき場所は閉じ忘れた{が開かれた場所です。関数やif文が入れ子になっているコードほど、どの{が対応不足かを目で追うのが難しくなります。

まとめ

error: expected declaration or statement at end of inputは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)