🚪 はじめてのC
🎯 エラーメッセージ1行を分解して読み、最初の1件から順に直せるようになる
コンパイルを実行したら赤い文字がずらっと出た——この瞬間に心が折れる人はとても多いです。ですがエラーメッセージは、あなたを責めているのではありません。どこで困ったかを教えてくれる、いちばん正確な相談相手です。読み方さえ分かれば怖くありません。
エラー1行の構造
gcc の場合、1行はこう並んでいます。
// hello.c:5:29: error: expected ';' before 'return'
// ファイル名 :行:桁 : 種類 : 内容左から順に、ファイル名・行番号・桁番号・種類(error か warning)・内容です。つまり「hello.c の5行目29桁目、return の前にセミコロンが要る」。ここまで読めれば、直す場所はほぼ決まります。
よく出る3つ
#include <stdio.h>
int main(void) {
printf("合計\n")
return 0;
}→ error: expected ';' before 'return'。「return の前にセミコロンが要る」。足りないのは実際には1つ前の行です。エラーは「気づいた場所」に出るので、直す場所が1行上になることはよくあります。
int main(void) {
printf("こんにちは\n");
return 0;
}→ warning: implicit declaration of function 'printf'。「printf という関数の宣言を見ていません」。#include <stdio.h> の書き忘れです。warning はコンパイルが通ってしまうこともありますが、放置してはいけません。多くは本物のバグの前触れです。
#include <stdio.h>
int main(void) {
printf("%d\n", tensuu);
return 0;
}→ error: 'tensuu' undeclared (first use in this function)。「tensuu という名前は知りません」。変数を作っていないか、綴りを間違えています。
鉄則——上から1個だけ直す
エラーが20行出ても、原因は1つということがよくあります。セミコロンが1つ欠けただけで、その後ろの解釈がすべてずれるからです。一番上のエラーだけ直して、もう一度コンパイルする。 これを繰り返すと、20行が一気に0になることも珍しくありません。
罠・注意
error と warning は別物。 error は実行ファイルができません。warning はできることがありますが、必ず読んで消します。
リンク段階のエラーは別枠。 undefined reference to 'main' のようなメッセージは、コンパイルの後の「リンク」で出ます。関数の中身が見つからない、というサインです。
英文を飛ばさない。 expected(〜が要る)、undeclared(宣言されていない)、too few arguments(引数が少ない)、incompatible type(型が合わない)。10個ほど覚えれば、たいてい読めます。
まとめ
エラー行は「ファイル:行:桁: 種類: 内容」の順で読みます。直す場所は指摘の1行上のこともあります。常に一番上の1件から直し、全部を読んで絶望しないことが最短ルートです。
プログラムの何が・どこで間違っているかを、コンパイラや実行環境が知らせてくれる文章のこと。読めば直し方のヒントが詰まっている味方。英語で書かれていることが多いが、落ち着いて読めば重要な情報が含まれている。
ソースコードをコンピュータが直接実行できる機械語に変換する作業。翻訳者が人間の言葉を機械の言葉に訳してくれる工程だとイメージすると分かりやすい。この工程を経なければ、書いたコードはコンピュータの上でまったく動かせない。
ソースコードを機械語に変換するソフトウェア。文法チェックも同時に行い、間違いがあればコンパイルエラーとして知らせてくれる翻訳者兼校正者にあたる。gccやclangなど、C言語向けのコンパイラにはいくつかの種類がある。
関数の宣言など、複数のファイルで共有したい情報をまとめた.hという拡張子のファイルのこと。#includeで取り込んで使う。#include <stdio.h>のstdio.hが、まさにこのヘッダファイルにあたる。
もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。