エラーとなるコード
#include <stdio.h>
int main(void){
int value;
average(50, 100, &value);
printf("%d\n", value);
return 0;
}
void average (int min, int max, int *answer) {
*answer = (min + max)/2;
return;
}
プログラムは上から処理される。
main関数ではaverage関数を呼び出している。しかし、average関数はmain関数より後に書かれているため下記のようなエラーが生じる。
つまり、使用する関数は呼び出す前に定義されていないといけない。
Main.c:8:5: warning: implicit declaration of function 'sum' is invalid in C99 [-Wimplicit-function-declaration]
sum(50, 100, &value);
^
Main.c:13:6: error: conflicting types for 'sum'
void sum (int min, int max, int *answer) {
^
Main.c:8:5: note: previous implicit declaration is here
sum(50, 100, &value);
^
1 warning and 1 error generated.
上記エラーを回避するための方法は2つ。
1つ目は記載順を変えること。average関数をmain関数より前に記述すればOK。
2つ目はプロトタイプ宣言をすること。
プロトタイプを宣言すると、関数について並びを考慮する必要がなくなり良い。
プロトタイプ宣言は、関数の中身の処理は省いて名前だけ先に定義できる機能。
下記のようにコードの先頭で宣言しておけばよい。
#include <stdio.h>
void average (int, int, int*); //プロトタイプ宣言!
int main(void){
int value;
average(50, 100, &value);
printf("%d\n", value);
return 0;
}
void average (int min, int max, int *answer) {
*answer = (min + max)/2;
return;
}
つぶやき。
main関数ってコードの一番下に書かれてることが多いなーなんでだろうなーと思っていたけど、
関数が宣言されてから使う必要がある(もしくはその名残?)からだったのか!と思った。