【C言語入門】第4章:C言語のエラーとその対処法を解説。

c言語◀️第3章:キーボード入力(scanf)

 

こんにちは。はるきんた です。今回はC言語のエラーとその対処法について解説していきたいと思います。

この記事を見てくだされば、これまでよく分からなかったエラーの意味やどこを修正すればエラーが改善されるのか理解出来るかと思います。

では、早速始めていきましょう!

 

エラー表示の見方

初めに、エラーを表示された場合にどこを見てエラーを修正すれば良いかというのを説明します。

例えば、以下のexample.cというHello Worldを出力するプログラムと作ったとします。

[example.c]

1]       #include<stdio.h>
2]       int main()
3]      {
4]
5]      printf("Hello World\n")
6]
7]      return 0
8]      }

※左の数字は行数を表し、解説しやすいように付けただけです。

このプログラムをコンパイルしようとすると、以下のエラーが出力されてしまいます。

 

エラー例

 

エラーを修正するために、ここで見て欲しいのが画像に記した四つの箇所です。

行、列、エラーの内容、エラーの個数です。

行と列はプログラム中の何行目と何列目でプログラムに誤りがあるのか教えてくれます。エラーによっては正確に行と列を指定されない時がありますが、その周辺で誤りがあるということなので、しっかりチェックしましょう。上の例で言いますと、7行11列目にプログラムの誤りがあるということを指摘されています。

エラーの内容の所では、プログラム中のエラーがどういったエラーなのか教えてくれます。上の例で言いますと、return 0の後にセミコロン(;)が無いということを指摘されています。

エラーの個数の所では、コンパイルした時点でプログラム中にあるエラーの個数を表示してくれます。上の例で言いますと、return 0の後ろのセミコロンが無いというエラーだけなので 1 error generated.と表示されています。

 

このようにしてどこが原因でエラーに引っかかってしまったのか探していきます。

では次にエラーの内容にいて解説していきます。

 

エラーを種類別に解説

ファイル名はerror.cにしています。

 

expected ○○ after ○○

これは先ほどの例に出しましたが、〇〇 の後ろに ○○ が足りないのでは無いかと指摘されているエラーです。

このエラーを見たら、何か書き忘れているものが無いか見直しましょう。

[エラーコード]

#include<stdio.h>
int main(){

printf("Hello World!\n");

return 0
}

 

[出力エラー]

error.c:6:11: error: expected ' ; ' after return statement

 

6行11列目のreturnの後ろはセミコロン( ; )ではないのか?と指摘されています。

 

[修正コード]

#include<stdio.h>
int main(){

printf("Hello World!\n");

return 0;
}

 

'○○' file not found

このエラーは○○というヘッダファイル(関数やマクロの定義が書かれているファイル)を読み込もうとしているが、〇〇というファイルが存在しない時に出力されるエラーです。

[エラーコード]

#include <studio.h>
int main(){

printf("Hello World!\n");

return 0;
}

 

[エラー出力]

error.c:1:9: fatal error: 'studio.h' file not found

 

ここでは'studio.h'というファイルは存在しないよと指摘されています。スペルが間違っていないか確認しましょう。

[修正コード]

#include<stdio.h>
int main(){

printf("Hello World!\n");

return 0;
}

 

'変数名' undeclared

このエラーは、定義されていない変数を使用した時に出力されるエラーです。

使っている変数が定義してあるか、また、スペルが間違っていないか見直しましょう。

[エラーコード]

#include<stdio.h>
int main(){

int result;

result = 1 + 1;
printf("result = %d\n", rselt);

return 0;
}

 

[エラー出力]

error.c:7:27: error: 'rseult' undeclared

 

ここでは7行目のrseultは定義されていないよと指摘されています。スペルが間違っていますね。

[修正コード]

#include<stdio.h>
int main(){

int result;

result = 1 + 1;
printf("result = %d\n", result);

return 0;
}

 

unknown type name '型名'
use of undeclared identifier '型名'; did you mean 'int'?

このエラーは型名が定義されていない時に出力されます。使っている変数の型が定義されているか、定義の時のスペルが間違っていないか見直しましょう。

[エラーコード]

#include<stdio.h>
int main(){

imt result;

result = 1 + 1;
printf("result = %d\n", result);

return 0;
}

 

[エラー出力]

error.c:4:3: error: unknown type name 'imt'

 

4行目のint 型をimtとスペルミスをしているようです。

[修正コード]

#include<stdio.h>
int main(){

imt result;

result = 1 + 1;
printf("result = %d\n", result);

return 0;
}

 

implicit declaration of function

このエラーは定義されていない関数を使おうとした時に出力されます。

[エラーコード]

#include<stdio.h>
int main(){

int result;

result = 1 + 1;
pritnf("result = %d\n", result);

return 0;
}

 

[出力エラー]

warning: implicit declaration of function 'pritnf' is invalid in
C99 [-Wimplicit-function-declaration]
pritnf("result = %d\n", result);
^
1 warning generated.
Undefined symbols for architecture x86_64:
"_pritnf", referenced from:
_main in error-6d3e8e.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

 

printfのスペルを間違えてpritnfにしてしまっているのでpritnfという関数はないよと指摘されています。

[修正コード]

#include<stdio.h>
int main(){

int result;

result = 1 + 1;
printf("result = %d\n", result);

return 0;
}

 

 

 

今回のエラーについての解説はここまでです!

他にもエラーの種類は沢山ありますので、それについても投稿していけたらなと思います。

 

また中編の章でお会いしましょう!👋

スポンサーリンク

-プログラミング
-,

© 2022 はるきんブログ Powered by AFFINGER5