Ex.エラーを解読する

  1. コンパイルエラーを起こす

    以前のプログラムを変更してエラーを吐かせてみよう

    int main()
    {
    	printf("Hello World\n");
    
    	return 0
    }
    
    コンパイルできないソースコードwrong_HW.c
    $gcc wrong_HW.c -Wall

    wrong_HW.c: In function 'main':
    wrong_HW.c:3:2: warning: implicit declaration of
    function 'printf' [-Wimplicit-function-declaration]
      printf("Hello World\n");
      ^
    wrong_HW.c:3:2: warning: incompatible implicit declaration
    of built-in function 'printf' [enabled by default]
    wrong_HW.c:6:1: error: expected ';' before '}' token
     }
     ^
    
    wrong_HW.cをコンパイルしようとした結果

    この例では1行目の#include ...と, 5行目の末尾にあるセミコロン(;)を取り除いた

  2. エラーを読む

    コンパイラがどのようにエラーを教えてくれるか見てみよう

    wrong_HW.c:*1 In function 'main':*2
    wrong_HW.c:3:2:*3 warning: implicit declaration of function 'printf'*4 [-Wimplicit-function-declaration]
    *1:エラーのあるソースファイル
    *2:エラーのある関数
    *3:エラーのある行と列
    *4:エラーの内容

    *1はwrong_HW.cというソースファイルの中にエラーがあることを示している
    今は1つしか扱っていないが, 大きなプログラムになると
    ソースファイルを分割し, 複数のソースファイルをコンパイルすることもあるため
    重要な情報だ

    *2はどの関数にエラーがあるかを示す
    これについては後日関数について学んだ後に確認してみよう

    *3はソースファイルの何行目の何列目にエラーがあるかを示している
    emacsであればgoto-line 数字
    vimであれば:数字
    で目的の行に飛べるのでエディタの機能を活用し, すばやくエラーを見つけることができる

    *4は具体的なエラーの内容を示す
    エラーメッセージは基本的に英語なので,
    苦手な人はGoogleでもエキサイトでも翻訳サイトを開きつつエラーの意味を理解しよう
    むやみにソースコードとにらめっこしていても時間の無駄になる

    以上を踏まえた上で改めてエラー内容を見てみよう

    1. wrong_HW.c: In function 'main':
    2. wrong_HW.c:3:2: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
    3.   printf("Hello World\n");
    4.   ^
    5. wrong_HW.c:3:2: warning: incompatible implicit declaration of built-in function 'printf' [enabled by default]
    6. wrong_HW.c:6:1: error: expected ';' before '}' token
    7.  }
    8.  ^

    まず1行目ではwrong_HW.cの関数mainの中と書いている
    次に2行目では
    wrong_HW.cの中の3行2列目に

    implicit declaration of function 'printf'

    があると言っている

    さすがに意味がわからないのでそれぞれの単語の意味を調べてみよう
    implicit:暗黙の
    declaration:宣言
    function:関数

    これらをエラーメッセージに当てはめると

    暗黙の 宣言 of 関数 'printf'

    つまり

    関数printfの宣言が暗黙である

    となる


    注)エラーメッセージのみならず, 多くのプログラムのメッセージは
    会話文(学校で習うような文法)と異なるため
     そのまま翻訳サイトで翻訳すると, おかしな文が出来上がることがある
     また, 一般的ではない特別な意味を持つ英単語もあるため気をつけよう

    Practice

    1. 6行目のエラーを和訳してみよう

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です