【问题标题】:Why this "Implicit declaration of function 'X'"? [duplicate]为什么这个“函数'X'的隐式声明”? [复制]
【发布时间】:2012-08-21 01:52:44
【问题描述】:

我编写了一个简单的程序来查找 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]

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

【问题讨论】:

    标签: c function compiler-warnings


    【解决方案1】:

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

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

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

    #include <stdio.h>
    
    int summation(int *, int *, int *);
    
    int main()
    {
        // ...
    

    【讨论】:

    • 啊,是的,我明白了。这意味着它应该被分解成 .c 部分并将它们编译在一起,不是吗?谢谢!
    • @0xEDD1E 更具体地说,它就像一本书。你从上到下阅读。如果您在顶部之前阅读底部,则您不了解情节。 C 和 C++ 程序也是如此。一切都必须在使用之前按字面意思定义...变量、函数、结构、枚举等。
    • 在 1990 版本的 C 标准中,有一个隐式声明,并且假定函数返回 int。在 1999 版本及以后的版本中,没有“隐式 int”规则;调用没有可见声明的函数是违反约束的。
    猜你喜欢
    • 2019-10-30
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 2019-10-23
    • 2019-11-05
    • 2017-09-27
    相关资源
    最近更新 更多