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

main()
{
   struct ack bad;

   foo(bad);
}

foo(c)
   struct ack c;
{

}

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

4

2 回答 2

6

尝试编译

-std=c11 -pedantic-errors

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

默认情况下gcc编译-std=gnu89为 c89 + GNU 扩展。用于隐式声明的 c89 规则已在 c99 中删除。

于 2013-08-05T21:46:51.047 回答
0

目前,一般来说,当编译器发现对foo(bad)in的调用main()并且未定义 foo 时,编译器会假定它存在并返回int.

这将问题推给链接器,如果foo()源文件中的某处未定义,链接器会抱怨。

于 2013-08-05T22:51:13.050 回答