Code Fix

初級

error: expected ';' before ... の原因と直し方

文末のセミコロンを書き忘れたときに出るエラーです。エラーが指す行ではなく、その1つ前の行にセミコロンが無いことがほとんどです。

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

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

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

パターン1

 1  #include <stdio.h>
 2  
 3  int main(void) {
 4      int x = 5 
                 ^
 5      printf("%d\n", x);
 6      return 0;
 7  }
main.c:5:5: error: expected ',' or ';' before 'printf'

文の終わりにはセミコロンが必要です。エラーは次に見つかった手がかり(ここではprintf)の位置を指すため、実際に直す場所は1行上です。

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

この問題を解いてみる →

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

パターン2

 1  #include <stdio.h>
 2  
 3  int main(void) {
 4      int total = 10 + 20 
                           ^
 5      printf("total=%d\n", total);
 6      return 0;
 7  }
main.c:5:5: error: expected ',' or ';' before 'printf'

式の後にセミコロンが無いと、コンパイラは文がまだ続いていると判断し、次の行の先頭で行き詰まります。

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

この問題を解いてみる →

パターン3

 1  #include <stdio.h>
 2  
 3  int main(void) {
 4      int a = 3;
 5      int b = 4 
                 ^
 6      printf("%d\n", a + b);
 7      return 0;
 8  }
main.c:6:5: error: expected ',' or ';' before 'printf'

複数の変数宣言のうち、どれか1つでもセミコロンを忘れると同じエラーになります。

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

この問題を解いてみる →

よくある誤解

エラーメッセージの行番号をそのまま信じて、その行を見ても何もおかしくないことがあります。実際にはコンパイラは「次のトークンが来るまで文が終わらない」と判断するため、抜けている箇所ではなく次に見つけた手がかりの位置を報告します。

まとめ

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

演習をはじめる

関連するエラー

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