コンパイルエラーと実行時エラーの違い|C・Python・JavaScriptで比較
結論
コンパイルエラーは、コードを実行できる形へ変換する段階で見つかるエラーです。実行時エラーは、コードの文法を通過したあと、実際に処理している途中で発生します。
初心者は、まず「実行ボタンを押したあと、プログラムの処理が始まったか」を確認してください。Cのセミコロン不足は処理が始まる前に止まります。一方、Pythonの0除算やJavaScriptの未定義変数は、問題の行を実行した時点で止まります。
発生している問題
エラーという言葉だけを見ると、すべて同じ原因に思えるかもしれません。しかし、直す場所はエラーが起きた段階で変わります。
- コンパイルエラー: 記号、文法、宣言などを確認する
- 実行時エラー: 入力値、変数の中身、処理の順番などを確認する
AI Work Studioでは、C/C++、Python、JavaScriptを同じ画面で切り替えられます。3つの例を比べると、エラー文を読む順番が分かりやすくなります。
原因
Cでは、ソースコードを解析して実行可能な形へ変換してから処理します。セミコロンがないコードは文法を正しく解析できないため、printfも実行されません。C言語委員会の公開草案でも、構文規則や制約に違反した翻訳単位には診断メッセージが必要とされています。
Python公式チュートリアルは、文法的に正しい文でも実行しようとしたときにエラーになる場合があり、それを例外と説明しています。ZeroDivisionErrorは、割り算を実行した時点で発生する例外です。
JavaScriptの仕様では、解決できない変数参照から値を取得しようとするとReferenceErrorになります。構文解析を通過しても、存在しないscoreを読む行で処理が止まります。
修正前コード
Cのコンパイルエラー
printfの末尾にセミコロンがありません。
#include <stdio.h>
int main() {
printf("Hello from C\n")
return 0;
}
ローカルのGCC 16.1.0では、次のエラーになりました。
error: expected ';' before 'return'
AI Work StudioではERROR: Parsing Failure:と表示され、;が必要な位置でreturnを検出しました。どちらもプログラム本体は実行されません。
Pythonの実行時エラー
文法は正しいため実行が始まりますが、peopleが0の状態で割り算を行う行で止まります。
total = 1200
people = 0
print(total / people)
ZeroDivisionError: division by zero
JavaScriptの実行時エラー
scoreを宣言していないまま読み取っています。
console.log(score);
ReferenceError: score is not defined
AI Work StudioのConsoleでは、先頭に[JS error]が付きました。
修正後コード
Cは文法を直す
printfの末尾へセミコロンを追加します。
#include <stdio.h>
int main() {
printf("Hello from C\n");
return 0;
}
Pythonは値を確認する
割る前に0かどうかを確認します。
total = 1200
people = 0
if people == 0:
print("0では割れません")
else:
print(total / people)
JavaScriptは先に変数を宣言する
値を読む前にscoreを宣言します。
const score = 80;
console.log(`score: ${score}`);
実行結果
修正後は、ローカル環境と公開中のAI Work Studioで次の表示になりました。
C/C++:
Hello from C
終了コード: 0
Python:
0では割れません
JavaScript:
score: 80
Cはコンパイルが成功してからHello from Cを表示しました。PythonとJavaScriptは問題の値や変数を修正したことで、最後まで処理できました。
よくある間違い
エラー名だけで判断する
SyntaxErrorという名前があっても、言語や実行環境によって検出される段階は異なります。まずエラー全文、対象行、実行結果が出る前か後かを確認してください。
コンパイル成功なら正しいと思う
コンパイル成功は文法などの確認を通過したという意味です。0除算、配列の範囲外、入力値による条件ミスまで防げるわけではありません。
最初のエラーを直さず次の行を見る
文法エラーでは、実際の書き忘れ位置より後ろの行が示される場合があります。表示された行だけでなく、その直前の括弧、引用符、セミコロンも確認します。
AI Work Studioで試す手順
- AI Work Studioを開きます。
- C/C++の
main.cppへ修正前コードを貼り、C/C++を実行を押します。 - セミコロンを追加し、
Hello from Cと終了コード0を確認します。 - Pythonの
main.pyで0除算と修正後コードを順番に実行します。 - JavaScriptの
script.jsでConsoleを開き、ReferenceErrorとscore: 80を確認します。
エラー文は環境によって周辺表示が変わります。名前だけを覚えるのではなく、「実行前に止まったか」「処理中に止まったか」を見分ける練習に使ってください。
まとめ
コンパイルエラーは実行前の変換・解析段階、実行時エラーは処理が始まったあとの段階で発生します。Cの文法エラーでは記号や宣言を、PythonやJavaScriptの実行時エラーでは値や変数の状態を確認するのが基本です。
エラーが出たら、全文、対象行、発生した段階の3点を順番に確認すると、原因を絞り込みやすくなります。
関連記事
- C言語のexpected ‘;’ beforeを直す|セミコロン不足の見つけ方
- PythonのZeroDivisionError: division by zeroを直す|0で割れない原因
- JavaScriptのReferenceError: score is not definedを直す|変数スコープの基本