本学の計算機環境で、いろいろなエラーを発生させてみて、その原因について考えてみます・・・
実習でエラーに遭遇した場合には、そのメッセージを読んで場所を特定してみましょう!
1) プログラム中に日本語(空白)が入っている場合
Z:\>pr -n: -t tmp1.c
1:#include <stdio.h>
2:
3:int main(void)
4:{
5: printf("hello, world\n");
6:}
Z:\>cl tmp1.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
tmp1.c
tmp1.c(5) : error C3872: '0x3000': この文字を識別子で使用することはできません
tmp1.c(5) : error C2065: ' ' : 定義されていない識別子です。
tmp1.c(5) : error C2146: 構文エラー : ';' が、識別子 'printf' の前に必要です。
|
tmp1.c(5) : error C3872: '0x3000': この文字を識別子で使用することはできません
↑ ↑
行番号 エラーの種類
→ '0x3000'
等、16進数表記が現れた場合には、プログラム中に日本語が含まれている可能性が高い
注意) エラーの場所は"おおよそ"の位置を表していると考えましょう。
複雑なエラーの場合には、コンピュータは本当のエラーの場所を特定することができません。
2) プログラムのタイプミス(パターン1: 命令が間違っている場合)
Z:\>pr -n: -t tmp2.c
1:#include <stdio.h>
2:
3:int main(void)
4:{
5: print("hello, world\n");
6:}
Z:\>cl tmp2.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
tmp2.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:tmp2.exe
tmp2.obj
tmp2.obj : error LNK2019: 未解決の外部シンボル _print が関数 _main で参照されました。
tmp2.exe : fatal error LNK1120: 外部参照 1 が未解決です。 |
tmp2.obj : error LNK2019: 未解決の外部シンボル _print が関数 _main で参照されました。
↑
タイプミスの命令(先頭に "_" が付きます)
→ 行番号の出力がなく、"未解決の外部シンボル"
として出力される場合には、プログラム中でタイプミスが発生している可能性が高い
3) プログラムのタイプミス(パターン2: 入力ミス)
Z:\>pr -n: -t tmp3.c
1:#include <stdio.h>
2:
3:int main(void)
4:{
5: printf("hello, world);
6:}
Z:\>cc tmp3.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
tmp3.c
tmp3.c(5) : error C2001: 定数が 2 行目に続いています。
tmp3.c(6) : error C2143: 構文エラー : ')' が '}' の前にありません。 |
tmp3.c(5) : error C2001: 定数が 2 行目に続いています。
↑
↑
行番号 エラーの種類