为什么在C中声明具有int返回类型的函数不是强制性的?

rya*_*yan 0 c function forward-declaration function-declaration

int main ()
{
hello();

return 0;
}

int hello()
{

printf("\n hello world");

return 0;
}
Run Code Online (Sandbox Code Playgroud)

根据C规则,下面定义的每个函数main()必须在上面声明,main() 但为什么它int作为返回类型的函数的异常?如果你将返回类型hello() 改为其他任何东西(void,char*等),它将抛出错误声明.为什么int 返回类型没有错误或警告?

Sou*_*osh 5

这是C的一个旧功能,现在官方不受支持.

在早期(在C99之前,如果我没有错),如果函数缺少返回类型,或者如果函数缺少正向声明,则假定函数返回int并接受任意数量的参数.您对函数的实际定义也与该假设相匹配,因此链接器也不会抱怨.

您的编译器仍支持该旧功能(主要是因为保持了与使用旧标准编写的程序的向后兼容性),因此您成功编译并链接了该程序.

仅供参考,在最新的C标准中,C11正式提到

  • 删除隐式函数声明

因此,根据严格的检查,必须转发声明一个函数(或者,在它的使用之前定义,以便编译器不必假设任何东西).