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 返回类型没有错误或警告?
这是C的一个旧功能,现在官方不受支持.
在早期(在C99之前,如果我没有错),如果函数缺少返回类型,或者如果函数缺少正向声明,则假定函数返回int并接受任意数量的参数.您对函数的实际定义也与该假设相匹配,因此链接器也不会抱怨.
您的编译器仍支持该旧功能(主要是因为保持了与使用旧标准编写的程序的向后兼容性),因此您成功编译并链接了该程序.
仅供参考,在最新的C标准中,C11正式提到
- 删除隐式函数声明
因此,根据严格的检查,必须转发声明一个函数(或者,在它的使用之前定义,以便编译器不必假设任何东西).