struct ack {
char a, b, c;
};
main()
{
struct ack bad;
foo(bad);
}
foo(c)
struct ack c;
{
}
这是gcc中的测试用例。当我尝试使用gcc4.8编译它时,它编译没有问题。但是,我了解到你必须在 main 之前声明你的功能。为什么这甚至可以编译?
答案 0 :(得分:6)
尝试使用
进行编译-std=c11 -pedantic-errors
您将获得所需的诊断信息。
默认情况下gcc
使用-std=gnu89
编译,这是c89 + GNU扩展。隐含声明的c89规则已在c99中删除。
答案 1 :(得分:0)
目前,通常情况下,当编译器在foo(bad)
中找到对main()
的调用并且未定义foo时,编译器会认为它存在且将返回int
。
这会给链接器带来问题,如果在源文件中某处未定义foo()
,他们会抱怨。