1個のエラーがそれ以降のエラーの原因になっていることがあります。エラーメッセージの上のモノから修正。
Borland C++ 5.5のコンパイラは次の書式でエラーや警告情報を書き出します。
以下の目次に初心者によく見られるエラーの種類を示しますので参考にしてください。
エラー Eエラー番号 ソースファイル名 行番号:エラーの種類
警告 W警告番号 ソースファイル名 行番号:警告の種類
エラーの番号と種類 警告の番号と種類
[目次]
[目次]
ブロック(複合文)のはじめと終わりを示す「{」と「}」の対応が取れていない。
プログラムは必ずきれいに字下げして、ブロックの対応がすぐわかるように書きましょう。
#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;
}
[目次]
[目次]
[目次]
ブロックの{と}が対応していないと思われます E2134 複合文に } がない を見てください。
[目次]
C言語では日本語に対応したコンパイラでもコメントと文字列定数以外の場所には半角の英数字以外を使うことはできません。
- 不正な文字 ' ' 日本語の全角空白文字は見つけにくいので注意してください。
- 不正な文字 ')' (0x816a) 全角の)をつかった場合
- 不正な文字 '”' (0x8168) 全角の”をつかった場合
文字列定数の初めでつかった場合にエラーが報告されますが、終わりでつかった場合は
「E2380 文字列または文字定数が閉じていない」となり、見つけにくくなります。- 不正な文字 '’' (0x8166) 全角の’をつかった場合
上の”と同じで終わりでつかった場合は 「E2380 文字列または文字定数が閉じていない」となる
[目次]
文の終わりのセミコロンは忘れがちです。指定された行だけでなく、その上の行も確かめましょう。
#include<stdio.h>
int main(void)
{
int a;
a=10 <<ここでセミコロンが無いのに
return a; <<この行でセミコロンが無いと言われる
}
コロンとセミコロンを間違うこともありますから目を凝らしてよく見ましょう。
[目次]
[目次]
プログラムで使用した変数などがブロックの先頭で宣言されていない場合などに起きます。
[目次]
[目次]
[目次]
[目次]
プログラムで変数、例えばxに値を代入したが、この値が使われていない様な場合。書きかけのプログラムをとりあえずコンパイルした様な場合によく見られます。
[目次]
returnの後ろにプログラムを書くなどして、どのような場合にも実行されない部分が有る。コンパイラが間違っている場合もありますが見直しましょう。
注意:無限ループになる様なプログラムではループの下のプログラムが実行されないので、この警告が出る場合もあります
[目次]
とりあえず変数を宣言したが使わなかった場合の警告です。使わない変数の宣言は消しましょう。
[目次]
if文などの条件式でa=0などと書くと警告されます。この間違いも多いので、警告だからといって無視してはいけません。
if(a=0){... は if(a==0){...の間違いでは?
[目次]
関数を呼ぶときは、その関数のプロトタイプか定義が事前にされている必要があります。例えば、printfやscanfを使う為には#include<stdio.h>がそれ以前(プログラムの初めの方)に必要です。プログラムの中の関数の順番には注意してください。
main関数を最初に書く場合は、main関数で使う関数のプロトタイプがmain関数の前に必要です。main関数を最後に書く場合はこの必要はありません。
[目次]
main関数でreturn文を書かなかった場合に出る警告。警告なので、コンパイルはされますが、やはり
return 0;
を書きましょう。
※main関数以外では、これはエラーとなります
[目次]