初級のC言語エラー 42問
14種類のエラーを、それぞれ複数パターンずつ収録しています。
- error: expected ';' before ... の原因と直し方文末のセミコロンを書き忘れたときに出るエラーです。エラーが指す行ではなく、その1つ前の行にセミコロンが無いことがほとんどです。
- error: expected declaration or statement at end of input の原因と直し方波括弧{}の対応が崩れ、閉じ忘れがあるときに出るエラーです。ファイルの終わりまで読んでもブロックが閉じられないため、末尾でエラーになります。
- error: 'x' undeclared (first use in this function) の原因と直し方宣言していない変数を使ったときに出るエラーです。宣言のタイプミスや、スコープの外で定義した変数を使おうとした場合に起きます。
- error: implicit declaration of function 'X' の原因と直し方標準ライブラリの関数を使う際に、対応する#includeを書き忘れたときに出るエラーです。以前のC言語では警告どまりでしたが、現在は多くの環境でエラーとして扱われます。
- error: missing terminating " character の原因と直し方文字列リテラルを開いたダブルクォートを閉じ忘れたときに出るエラーです。1行の途中で誤って別の記号を書いてしまった場合にも起きます。
- error: invalid operands to binary % の原因と直し方剰余演算子%をdouble型やfloat型に対して使おうとしたときに出るエラーです。%はint型などの整数型専用の演算子です。
- error: unknown type name の原因と直し方型名の大文字小文字を間違えたときに出るエラーです。intをIntと書いてしまうなど、キーボードの打ち間違いで起きがちです。
- error: initialization of 'char' from 'char *' makes integer from pointer without a cast の原因と直し方1文字を表すchar型の変数に、ダブルクォートで囲んだ文字列リテラルを代入しようとしたときに出るエラーです。シングルクォートとダブルクォートは別物です。
- if文の条件式で = と == を間違えて常に真になる比較のつもりで==と書くべきところを=と書いてしまうと、比較ではなく代入になり、条件は代入した値の真偽で判定されます。エラーにはならず、意図しない分岐が起こります。
- int同士の割り算で小数点以下が切り捨てられるint型同士を/で割ると、結果もint型になり小数点以下が切り捨てられます。平均値の計算などで意図せず結果が狂う典型的な原因です。
- 配列のループが1つずれて範囲外を読む・最後の要素が抜ける添字は0から要素数-1までという境界を1つ間違えると、最後の要素が抜けたり、配列の外を読んでしまったりします。
- Floating point exception(整数のゼロ除算)int型を0で割ったときに発生するクラッシュです。Cはこれを例外として捕まえられず、プログラムはその場で強制終了します。
- Segmentation fault(NULLポインタの参照)NULL(何も指していないポインタ)の指す先を読み書きしようとしたときに発生するクラッシュです。Cで最も頻出する実行時エラーです。
- printfの%dにdouble型を渡すと無関係な値が表示される%dは整数用の書式指定子です。double型の値を%dに渡すと、コンパイルは通り実行もできますが、表示される数値はまったく無関係な値になります。