C言語のexpected ‘;’ beforeを直す|セミコロン不足の見つけ方
C言語を実行したとき、error: expected ';' before 'return' と表示されることがあります。これは多くの場合、エラーが示す行そのものではなく、その1つ前の行にセミコロンがないことが原因です。この記事では、同じコードをGCCとAI Work Studioで実行し、エラーの見方から修正後の出力まで確認します。
結論
expected ';' before が出たら、表示された単語の直前だけでなく、1つ前の文の末尾を確認します。今回のコードでは、return の前にある printf の末尾へセミコロンを追加すれば直ります。
printf("OK\n");
発生している問題
次のプログラムは、画面に OK と表示するだけの短い例です。しかし、printf("OK\n") の末尾にセミコロンがありません。
修正前コード
#include <stdio.h>
int main() {
printf("OK\n")
return 0;
}
GCC 16.1.0では、次のエラーになりました。
<stdin>: In function 'main':
<stdin>:4:19: error: expected ';' before 'return'
AI Work Studioでは、5行目の5文字目で解析に失敗し、期待している記号の一覧に ";" が含まれる構文解析エラーになりました。
ERROR: Parsing Failure: line 5 (column 5): printf("OK\\n")\n return 0;\n} -----------------------------------------^ Expected "!=", "%", "%=", "&", "&&", "&=", "(", "*", "*=", "+", "++", "+=", ",", "-", "--", "-=", "->", ".", "/", "/*", "//", "/=", ";", "<", "<<", "<<=", "<=", "=", "==", ">", ">=", ">>", ">>=", "?", "[", "^", "^=", "|", "|=", "||" or [ \n\r\t\u000B\u000C] but "r" found.
原因
C言語では、printf のような関数呼び出しを1つの文として書くとき、末尾をセミコロンで区切ります。セミコロンがないと、コンパイラは次の return まで読んでから「ここにはセミコロンが必要だった」と判断します。そのため、エラーは5行目の return を指していても、実際に直す場所は4行目の末尾です。
GCC公式マニュアルでも、エラーには問題が明らかになったソース位置が表示されると説明されています。エラー位置は重要な手掛かりですが、必ずしも入力ミスそのものの位置とは限りません。
修正後コード
4行目の printf("OK\n") の後ろへセミコロンを追加します。変更はこの1文字だけです。
#include <stdio.h>
int main() {
printf("OK\n");
return 0;
}
実行結果
修正後はGCCとAI Work Studioの両方で正常終了し、標準出力は次の1行で一致しました。
OK
AI Work StudioのConsoleには、出力の後に 終了コード: 0 も表示されます。これはプログラムがエラーなく終了したことを表します。標準入力は使わず、Previewには表示する内容がありません。
よくある間違い
returnの後ろだけを確認する
エラー文に before 'return' とあるため、return 0; を何度も直したくなります。しかし今回の return 0; には、すでにセミコロンがあります。1つ前の printf を確認してください。
波括弧の後ろへセミコロンを付ける
関数を閉じる } の後ろへセミコロンを追加しても、printf の文は完成しません。エラーの直前にある、セミコロンで終わるべき文へ追加します。
エラー行だけを見る
コンパイラはコードを上から読んで、続きが解釈できなくなった場所で止まります。表示された行と、その1〜2行前をセットで確認すると、原因を見つけやすくなります。
AI Work Studioで試す手順
- AI Work Studioを開きます。
C / C++タブを選びます。- 修正前コードを貼り付け、「C/C++を実行」を押します。
- Consoleの構文解析エラーに
";"が含まれることを確認します。 printf("OK\n");と修正して、もう一度実行します。- Consoleに
OKと終了コード: 0が表示されれば成功です。
現在のAI Work Studioでは、この例は int main() の形で実行します。標準入力欄は空のままで問題ありません。
まとめ
expected ';' before は、直前の文にセミコロンがないときに起きやすいコンパイルエラーです。エラーが return を指していても、1つ前の行を確認してください。今回のように、セミコロン1文字を追加するだけで正常に実行できます。