web-dev-qa-db-ja.com

なぜこの「関数 'X'の暗黙の宣言」?

3つの数字の合計、平均、最大、最小を見つける簡単なプログラムを作成しました。ユーザーは3つの(整数)数値を入力し、合計、平均、最大、最小を返すことができます。エラーはありませんが、警告があります。ここに私のソースコードがあります:

main.c:

#include <stdio.h>

int main()
{
    int num1, num2, num3, sum, max, min, avg;

    printf("Enter Three \"Integer\" Numbers:");

    scanf("%i%i%i", &num1, &num2, &num3);

    sum = summation(&num1, &num2, &num3);
    avg = average(&sum);
    max = max_val(&num1, &num2, &num3);
    min = min_val(&num1, &num2, &num3);

    printf("Sum: %i Avg: %i MAX: %i MIN: %i", sum, avg, max, min);

    return 0;
}

int summation(int *n1, int *n2, int *n3)
{
    int s;
    s = *n1 + *n2 + *n3;

    return s;
}

int average(int *s)
{
    int a;
    a = *s / 3;

    return a;
}

int max_val(int *n1, int *n2, int *n3)
{
    int MAX;

    if (*n1 > *n2) MAX = *n1;
    else if (*n2 > *n3) MAX = *n2;
    else MAX = *n3;

    return MAX;
}

int min_val(int *n1, int *n2, int *n3)
{
    int MIN;

    if (*n1 < *n2) MIN = *n1;
    else if (*n2 < *n3) MIN = *n2;
    else MIN = *n3;

    return MIN;
}

すべての関数は「int」型であるため、ヘッダーファイルを作成する必要はないと思います。

これをコンパイルすると

gcc main.c -o test

それは言います

main.c: In function 'main':
main.c:34:5: warning: implicit declaration of function 'summation' [-Wimplicit-function-declaration]

なぜこの警告ですか?私はその宣言に間違いを見つけることができません。あれは何でしょう?

16
0xEDD1E

summationと他の関数が定義されていますaftermainで使用されているため、コンパイラはそのシグネチャについて推測しました。つまり、暗黙の宣言が想定されています。

関数を使用する前に宣言し、警告を取り除く必要があります。 C99仕様では、これはエラーです。

関数の本体を移動しますbeforemain、またはmainの前にメソッドシグネチャを含めます。例:

#include <stdio.h>

int summation(int *, int *, int *);

int main()
{
    // ...
33
pb2q