C言語のコンパイルエラー一覧と対処法。gccのエラーメッセージの読み方を完全解説。
error: メッセージを出します。ファイル名:行番号: error: 内容 の形式です。; を忘れている。エラー行の1行前を確認。int x = 10 // ← ここに ; がない printf("%d", x); // ← ここでエラーと言われる
() の対応が合っていない。閉じカッコの数を数えよう。printf("x=%d\n", x; // ← ) が足りない printf("x=%d\n", x); // ← OK
int x = 10; // ← = と 10 の間に全角スペース! int x = 10; // ← OK(半角スペース)
{} の対応がずれて、elseが孤立している。if (x > 0) { printf("正\n"); }} // ← } が1個多い → else が孤立 else { ... }
count → cont)#include の書き忘れ(printfが未定義になる)
int x = "hello"; // NG: int に文字列を代入 int x = 42; // OK
int add(int a, int b) { return a+b; } add(1); // NG: too few (2つ必要なのに1つ) add(1,2,3); // NG: too many (2つなのに3つ) add(1,2); // OK
void greet() { printf("Hi\n"); } int r = greet(); // NG: voidには戻り値がない
error: ではなく undefined reference と出るのが特徴。main関数がない。ファイル内に int main(void) が書かれているか確認。関数名の大文字/小文字も注意(MainはNG)。-lm オプションをつけていない。// NGなコンパイルコマンド gcc program.c -o program // OK: -lm を末尾につける gcc program.c -o program -lm
-Wallオプションで全警告を有効にしましょう。gcc -Wall program.c -o program // すべての警告を表示
#include<stdio.h> を忘れている。double pi = 3.14; printf("%d\n", pi); // NG: doubleに%d → %fを使う printf("%f\n", pi); // OK
return が書かれていないルートがある。int max(int a, int b) { if (a > b) return a; // else の return が無い! }
=(代入)を使っている。==(比較)の書き間違い?if (x = 5) // 警告!代入になっている if (x == 5) // OK: 比較
A. 最も多い原因はセミコロン(;)の忘れです。次に括弧の不一致、全角文字の混入が続きます。エラーメッセージを読む際は「エラーが報告された行の1行前」も必ずチェックしましょう。
A. エラーメッセージは「ファイル名:行番号: error: 内容」の形式です。1. ファイル名と行番号を確認し、2. errorの後の説明文を読みます。説明が難しければ、エラーメッセージ全体をコピーしてネットで検索するのも効果的です。
A. エラー(error)はコンパイルを止める深刻な問題で、修正必須です。警告(warning)はコンパイルは通りますが潜在的な問題を示唆しています。プロの開発では警告も修正するのが常識です。
A. このエラーは変数や関数が宣言されていないことを意味します。対処法は:1. #includeを追加する、2. 変数を先に宣言する、3. スペルを確認するです。特に `stdio.h` を忘れるこのエラーが頻発します。
この講座の理解度をチェックしましょう!
使用している変数や関数が宣言されていない場合に発生します。スペルミスや #include の不足も原因になります。
コンパイラはセミコロンがない行の次の行でエラーを報告することが多いです。エラー行の前後も確認しましょう。
error はコンパイルが失敗しますが、warning はコンパイルは成功します。ただし warning も修正すべきです。