c - 在我的代码中,为什么缺少函数声明对一个函数来说不是问题,但对另一个函数会发出警告?

标签 c

在下面的程序中,我使用了 prd() 和 display() 两个函数。我在 main() 中调用它们之前都没有在 main() 之前声明它们,并且我在 main() 之后定义了它们。然而虽然 prd() 在 main() 中运行顺利,但调用 display() 会显示警告“先前的‘display’隐式声明在这里”。display() 的不同之处在于它有警告但其他功能没有prd()?我一开始就没有声明它们。由于调用一个,仍然有警告,但另一个工作正常。

    #include<stdio.h>

    int main()
    {
        int x=8,y=11;

        printf("The product of %d & %d is %d",x,y,prd(x,y));

        display();

        return 0;
    }

    int prd(int x,int y)
    {
        return x*y;
    }

    void display()
    {
        printf("\n Good Morning");
    }

PS:如果您能回答这个次要问题,我将不胜感激——“如果有函数定义,C 中是否根本不需要函数声明?”。我有声明程序所有函数的习惯在 main() 函数之前,然后在 main() 函数之后定义它们。我错了吗?

最佳答案

当您使用未声明的 display() 时,编译器会隐式声明它,就好像它正在返回 int 一样。

当编译器最终看到 display() 的定义时,它看到返回类型是 void,但它已经假定它是 int 因此定义和隐式声明不同,因此出现错误/警告。

关于c - 在我的代码中,为什么缺少函数声明对一个函数来说不是问题,但对另一个函数会发出警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15756196/

相关文章:

c - 在 C 中分割命令行参数

c - 使用 static 关键字声明变量

c - 奇怪的编译行为

c - 如何将一串字符插入到 char* 的中间并将所有字符向右移动而不删除任何内容

c - 运行时 C 函数详细信息

c++ - 在这种情况下,我们可以使用 "signed"到 "unsigned"的技巧来保存一次比较吗?

c - C的递归下降解析器

c - C中的一个小困惑

c - 错误 234,有更多数据可用,有 RegQueryInfoKey 和 RegEnumValue

c - Arduino 不同函数中具有两个值的全局变量