为什么这个“隐含声明函数’X’”?

我写了一个简单的程序来查找3个数字的Sum,average,maximum和最小数。 它允许用户输入三个(整数)数字并返回总和,平均值,最大值和最小值。 它没有错误,只有警告。 这是我的源代码:

main.c中:

#include  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] 

为什么这个警告? 我在该声明中找不到任何错误。 那是什么?

summation和你的其他函数在main使用定义,因此编译器猜测了它的签名; 换句话说,假设了一个隐含的声明

您应该在使用之前声明该函数并删除警告。 在C99规范中,这是一个错误。

main 之前移动函数体,或者在main之前包含方法签名,例如:

 #include  int summation(int *, int *, int *); int main() { // ...