在我的代码中,为什么缺少一个函数声明对于一个函数来说不是问题,而是为另一个函数抛出警告?

在下面的程序中,我使用了两个函数prd()和display()。我在main()中调用它们之前都没有在main()之前声明它们,并且我在main()之后定义了两个函数。然而,prd( )在main()内部顺利工作,调用display()显示警告“’display’的上一个隐式声明在这里”。有什么不同关于display()有警告,但没有其他函数prd() ?我已经声明它们都没有开始。由于调用一个警告,但是其他一个工作正常。

#include 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中是否根本没有必要的function声明,只要它有定义吗?”。我习惯在主要部分之前声明程序的所有function()函数,然后在main()函数之后定义它们。我错了吗?

当您使用未声明的display() ,编译器会隐式声明它就像返回int

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

发生此错误是因为C认为所有非启动函数的返回类型为int 。 稍后使用void返回类型定义displayfunction。

display()的返回类型更改为int将删除警告。

默认情况下,编译器将非声明函数假定为返回int

这适用于您的prd函数,但它与display()不匹配,因为它的void 。 这会导致编译器发出警告。

对于2nd,它总是适合声明函数。