web-dev-qa-db-fra.com

Pourquoi cette "déclaration implicite de la fonction 'X'"?

J'ai écrit un programme simple pour trouver la somme, le nombre moyen, le plus grand et le plus petit de 3 nombres. Il permet à l'utilisateur de saisir trois nombres (entiers) et de renvoyer la somme, la moyenne, le max et le min. Il n'a pas d'erreurs mais un avertissement. Voici mon code source:

principal 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;
}

Je pense qu'il n'est pas nécessaire de créer un fichier d'en-tête car toutes les fonctions sont de type "int".

Quand je compile ceci

gcc main.c -o test

Ça dit

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

Pourquoi cet avertissement? Je ne trouve rien de mal dans cette déclaration. Qu'est-ce que c'est?

16
0xEDD1E

summation et vos autres fonctions sont définies après elles sont utilisées dans main, et donc le compilateur a fait une supposition sur sa signature; en d'autres termes, une déclaration implicite a été supposée.

Vous devez déclarer la fonction avant de l'utiliser et vous débarrasser de l'avertissement. Dans la spécification C99, il s'agit d'une erreur.

Soit déplacer les corps de fonction avantmain, soit inclure des signatures de méthode avant main, par exemple:

#include <stdio.h>

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

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