Kadai Teishutsu (Fukuoka University of Education)
C言語のプログラム作成時に起こるミスの例
プログラム作成以外
意外にもよくやってしまいます。
エラーメッセージを読む

全角スペースが入っている

test.c: In function `main':
test.c:3: error: stray '\129' in program
test.c:3: error: stray '@' in program
3行目のプログラムの字を出力する個所以外に全角スペースが入っている。

→3行目に移動カーソルを移動させ、カーソルの形が 大きくなった場所に全角の スペースがあるので、半角に置きかえる。

セミコロンがない

test.c: In function `main':
test.c:4: error: parse error before "for"
test.c:4: error: parse error before ')' token
4行目の前が parse errorなので、 直前の3行目にセミコロンがあるか確かめる。

meadow でプログラムを作成している場合は、4行目にTabを入れたときに、 セミコロンを忘れると、思ったところより右にくる 。 (その機能を利用すべき。人間の目でチェックするのは限界があるので機械に確 かめてもらった方が良いことがよくある)

関数が定義されていない

/cygdrive/c/DOCUME~1/nakata/LOCALS~1/Temp/ccrcVT0r.o:test.c:(.text+0x63):
undefined reference to `_print'
collect2: ld returned 1 exit status
_printという関数が定義されていない (undefined)と怒られているので定義する。多くの場合、
print→printf
とすれば大丈夫。使用する関数の名前が正しいかチェックする。

引数の数が多い

test.c: In function `main':
test.c:6: error: too many arguments to function `puts'
putsは引数が1つが正しい使用法であるにも かかわらず
puts("sum = %f\n", sum);
のような書き方をしている。 printf と区別するようにマニュアルをよく読むこ と。
エラーメッセージのでないエラー

scanfに関して「&」がない

scanf("%d", i); /*  &i となっていない */

gcc では何も文句は言われませんが、a.exe を行うときに core を dump されます(メモリの中の状態をファイルに吐き出し ています)。

== 演算子に関して

and 演算子に関して

「&」や「|」は2つ重ねないと正しく動いてくれない。

else にも条件を書く

   
if( a == b ) 
  printf("test1\n");
else (b == c) /* b == c は書かない */
  printf("test2\n");

ついつい else にも条件を書いてしまうこともあるが、 else とはその他の意味 なので条件を書いてはいけない。

その他の初歩的エラー

コメント行が終わっていない

/*
中略
/*
のように書くと「中略」はコメントされない。

meadow でプログラムを作成している場合は、普通にしておけば int や return 等(予約語と言います)の色が変わって表示されるので、 全て茶色で表示されている場合は注意が必 要。

ファイル名に「.c」がない