c - 为什么这个 "Implicit declaration of function ' X'”?

标签 c function compiler-warnings

<分区>

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

主.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]

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

最佳答案

summation 和您的其他函数是在 之后定义的,它们在 main 中使用,因此编译器猜测它的签名;换言之,假定了一个隐式声明

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

要么将函数体移动到 main 之前,要么在main 之前包含方法签名,例如:

#include <stdio.h>

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

int main()
{
    // ...

关于c - 为什么这个 "Implicit declaration of function ' X'”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12127364/

相关文章:

c - wchar_t 变量仅存储 C 中乌尔都语字符的一半

Android:从DialogFragment调用Activity的函数

c++ - 是否可以多线程同时执行非void函数? (C++)

c - 我怎样才能把不同的数字放在 C 上的 2 个数组中

visual-studio-2008 - 当我忘记处理 IDisposable 对象时,Visual Studio 可以警告我吗?

c - 绕过地址随机化和堆栈粉碎保护 - 缓冲区溢出攻击的可行性

c - 为什么 if( union member) 评估为 True?

c - 当我遗漏 C 函数的参数时会发生什么?

java - 简单参数的堆污染

c - 二维矩阵的值未分配正确