繁体   English   中英

C:在main下定义函数-为什么要编译?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM