本学の計算機環境で、いろいろなエラーを発生させてみて、その原因について考えてみます・・・
1) プログラム中に日本語(空白)が入っている場合
[~]$ pr -n: -t tmp1.c
1:#include <stdio.h>
2:
3:int main(void)
4:{
5: printf("hello, world\n");
6:}
[~]$ cc tmp1.c
tmp1.c: 関数 `main' の内部:
tmp1.c:5: 文法エラー , 場所は文字 0241 の前 |
tmp1.c:5: 文法エラー , 場所は文字 0241 の前
↑
↑
↑
行番号 エラーの種類 エラーの場所
→ '0241'
等という4文字の表記が現れた場合には、プログラム中に日本語が含まれている可能性が高い
注意) エラーの場所は"おおよそ"の位置を表していると考えましょう。
複雑なエラーの場合には、コンピュータは本当のエラーの場所を特定することができません。
2) プログラムのタイプミス(パターン1: 命令が間違っている場合)
[~]$ pr -n: -t tmp2.c
1:#include <stdio.h>
2:
3:int main(void)
4:{
5: print("hello, world\n");
6:}
[~]$ cc tmp2.c
未定義の
最初に参照している
シンボル
ファイル
print
/var/tmp/cchgGzmH.o
ld: 重大なエラー: シンボル参照エラー。a.out に書き込まれる出力はありません。
collect2: ld returned 1 exit status |
未定義の
最初に参照している
シンボル
ファイル
print
/var/tmp/cchgGzmH.o
↑
タイプミスの命令
→ 行番号の出力がなく、"未定義シンボル"
として出力される文字がプログラム中で使用されている可能性が高い
3) プログラムのタイプミス(パターン2: 入力ミス)
[~]$ pr -n: -t tmp3.c
1:#include <stdio.h>
2:
3:int main(void)
4:{
5: printf("hello, world);
6:}
[~]$ cc tmp3.c
tmp3.c:5: 文字列・文字定数がとじていません
tmp3.c:5: 多分ここが閉じていない文字列・文字定数のはじまりです |
tmp3.c:5: 文字列・文字定数がとじていません
↑
↑
行番号 エラーの種類