[英]Why does the below recursive main function start with the value 1 as parameter?
[英]C: defining function below main - why does this compile?
struct ack {
char a, b, c;
};
main()
{
struct ack bad;
foo(bad);
}
foo(c)
struct ack c;
{
}
这是gcc中的测试用例。 当我尝试使用gcc4.8进行编译时,它可以毫无问题地进行编译。 但是,我了解到必须在main之前声明函数。 为什么还要编译?
尝试编译
-std=c11 -pedantic-errors
您将获得所需的诊断信息。
默认情况下, gcc
使用-std=gnu89
进行编译,这是c89 + GNU扩展。 隐式声明的c89规则已在c99中删除。
当前,通常,当编译器在main()
找到对foo(bad)
的调用并且未定义foo时,编译器会假定它存在并且将返回int
。
这将问题推给链接器,如果在源文件的某个位置未定义foo()
,链接器将抱怨。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.