int main ()
{
hello();
return 0;
}
int hello()
{
printf("\n hello world");
return 0;
}
根据 C 规则,定义在 main()
下方的每个函数都必须在 main()
上方声明,但为什么它是具有 int 的函数的异常(exception)
作为返回类型?
如果您将 hello()
的返回类型更改为其他类型(void、char * 等)
它会抛出声明错误。为什么 int
返回类型没有错误或警告?
最佳答案
这是 C 的一个旧特性,现在正式不支持了。
在早期(C99 之前,如果我没记错的话),如果函数缺少返回类型,或者函数缺少前向声明,则函数是假设返回一个int
并接受任意数量的参数。您对该函数的实际定义也符合该假设,因此链接器也不会提示。
您的编译器仍然支持该旧功能(主要是为了保持对使用旧标准编写的程序的向后兼容性),因此您可以成功编译和链接该程序。
仅供引用,在最新的 C 标准 C11
中,官方提到了它
- remove implicit function declaration
因此,根据严格检查,必须前向声明一个函数(或者,在使用前定义,这样编译器就不必承担任何事情)。
关于c - 为什么在 C 中不强制声明具有 int 返回类型的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39416299/