本学の計算機環境で、いろいろなエラーを発生させてみて、その原因について考えてみます・・・
実習でエラーに遭遇した場合には、そのメッセージを読んで場所を特定してみましょう!
 
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) C/C++ Optimizing Compiler Version 18.00.21005.1 for x64
Copyright (C) Microsoft Corporation. All rights reserved.

tmp1.c
tmp1.c(5) : error C3872: '0x3000': この文字を識別子で使用することはできません
 
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) C/C++ Optimizing Compiler Version 18.00.21005.1 for x64
Copyright (C) Microsoft Corporation. All rights reserved.

tmp2.c
Microsoft (R) Incremental Linker Version 12.00.21005.1
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) C/C++ Optimizing Compiler Version 18.00.21005.1 for x64
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 行目に続いています。
      ↑        ↑
     行番号  エラーの種類

 
 
 


Kunihiro Egami <egami@egamix.com>