コンパイルエラーの読み方


[index]

エラーは最初のものから修正

1個のエラーがそれ以降のエラーの原因になっていることがあります。エラーメッセージの上のモノから修正。
Borland C++ 5.5のコンパイラは次の書式でエラーや警告情報を書き出します。
以下の目次に初心者によく見られるエラーの種類を示しますので参考にしてください。

エラー Eエラー番号 ソースファイル名 行番号:エラーの種類
警告  W警告番号 ソースファイル名 行番号:警告の種類

目次

エラーの番号と種類 警告の番号と種類
  • E2040 宣言が正しく終了していない
  • E2054 else の位置が誤っている
  • E2134 複合文に } がない 
  • E2141 宣言の構文エラー
  • E2188 式の構文エラー
  • E2190 不要な }
  • E2206 不正な文字
  • E2379 ステートメントにセミコロン(;)がな
  • E2380 文字列または文字定数が閉じていない
  • E2451 未定義のシンボル
  • W8004 'x' に代入した値は使われていない
  • W8019 コードは効果を持たない
  • W8057 パラメータ 'a' は一度も使用されない
  • W8060 おそらく不正な代入
  • W8065 プロトタイプ宣言のない関数
  • W8070 関数は値を返すべき(関数 main )

E2040 宣言が正しく終了していない

目次


E2054 else の位置が誤っている

目次


E2134 複合文に } がない 

ブロック(複合文)のはじめと終わりを示す「{」と「}」の対応が取れていない。

プログラムは必ずきれいに字下げして、ブロックの対応がすぐわかるように書きましょう。

#include<stdio.h>  <<プリプロセッサへの命令は先頭から

int main(void)     <<関数の頭部は先頭から ブロックの開始は次の行から始める人が多い
{
        <<ブロック内はタブ1個分(4or8文字)下げる
        int a;
        scanf("%d",&a);

        /*分岐や繰り返しのブロックの書き方は2種類の書き方があるがどちらかに統一すること*/

        /*1。行数を減らしたい*/
        if(0<a){
                printf("aは正\n");
        }else if(0>a){
                printf("aは負\n");
        }else{
                printf("aは零\n");
        }

        /*2。ブロックを解り易くしたい*/
        if(0<a)
        {
                printf("aは正\n");
        }
        else if(0>a)
        {
                printf("aは負\n");
        }
    else
    {
                printf("aは零\n");
    }

        /*私は行数を減らすのによく使いますが、でもこの形はお薦めしません*/
        if(0<a) printf("aは正\n");
        else if(0>a) printf("aは負\n");
        else printf("aは零\n");



        return 0;
}

目次


E2141 宣言の構文エラー

目次


E2188 式の構文エラー

目次


E2190 不要な }

ブロックの{と}が対応していないと思われます E2134 複合文に } がない を見てください。

目次


E2206 不正な文字

C言語では日本語に対応したコンパイラでもコメントと文字列定数以外の場所には半角の英数字以外を使うことはできません。

目次


E2379 ステートメントにセミコロン(;)がない

文の終わりのセミコロンは忘れがちです。指定された行だけでなく、その上の行も確かめましょう
#include<stdio.h>
int main(void)
{
        int a;
        a=10    <<ここでセミコロンが無いのに
        return a;  <<この行でセミコロンが無いと言われる
}
コロンとセミコロンを間違うこともありますから目を凝らしてよく見ましょう。

目次


E2380 文字列または文字定数が閉じていない

目次


E2451 未定義のシンボル

プログラムで使用した変数などがブロックの先頭で宣言されていない場合などに起きます。

目次


目次


目次


目次


W8004 'x' に代入した値は使われていない

プログラムで変数、例えばxに値を代入したが、この値が使われていない様な場合。書きかけのプログラムをとりあえずコンパイルした様な場合によく見られます。

目次


W8019 コードは効果を持たない

returnの後ろにプログラムを書くなどして、どのような場合にも実行されない部分が有る。コンパイラが間違っている場合もありますが見直しましょう。
注意:無限ループになる様なプログラムではループの下のプログラムが実行されないので、この警告が出る場合もあります

目次


W8057 パラメータ 'a' は一度も使用されない

とりあえず変数を宣言したが使わなかった場合の警告です。使わない変数の宣言は消しましょう。

目次


W8060 おそらく不正な代入

if文などの条件式でa=0などと書くと警告されます。この間違いも多いので、警告だからといって無視してはいけません。
if(a=0){... は if(a==0){...の間違いでは?

目次


W8065 プロトタイプ宣言のない関数

関数を呼ぶときは、その関数のプロトタイプか定義が事前にされている必要があります。例えば、printfやscanfを使う為には#include<stdio.h>がそれ以前(プログラムの初めの方)に必要です。プログラムの中の関数の順番には注意してください。
main関数を最初に書く場合は、main関数で使う関数のプロトタイプがmain関数の前に必要です。main関数を最後に書く場合はこの必要はありません。

目次


W8070 関数は値を返すべき(関数 main )

main関数でreturn文を書かなかった場合に出る警告。警告なので、コンパイルはされますが、やはり
return 0;
を書きましょう。
※main関数以外では、これはエラーとなります

目次