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

时间:2013-08-05 21:45:09

标签: c

struct ack {
    char a, b, c;
};

main()
{
   struct ack bad;

   foo(bad);
}

foo(c)
   struct ack c;
{

}

这是gcc中的测试用例。当我尝试使用gcc4.8编译它时,它编译没有问题。但是,我了解到你必须在 main 之前声明你的功能。为什么这甚至可以编译?

2 个答案:

答案 0 :(得分:6)

尝试使用

进行编译
-std=c11 -pedantic-errors

您将获得所需的诊断信息。

默认情况下gcc使用-std=gnu89编译,这是c89 + GNU扩展。隐含声明的c89规则已在c99中删除。

答案 1 :(得分:0)

目前,通常情况下,当编译器在foo(bad)中找到对main()的调用并且未定义foo时,编译器会认为它存在且将返回int

这会给链接器带来问题,如果在源文件中某处未定义foo(),他们会抱怨。

相关问题