在C中定义函数之前使用函数时的隐式声明,为什么编译器无法解决这个问题呢?

rol*_*lls 1 c gcc compiler-warnings gcc-warning

正如标题所说,我知道导致此错误的原因,但我想知道为什么编译器会在这种情况下提供它.

例如:

main.c中

void test(){
    test1();
}

void test1(){
   ...
}
Run Code Online (Sandbox Code Playgroud)

会给出一个隐式声明警告,因为编译器在读取它的声明之前会调用test1(),我可以看到这个明显的问题(不知道返回类型等),但为什么编译器不能做一个简单的传递获取所有函数声明,然后编译删除这些错误的代码?这看起来很简单,我不相信我在其他语言中看到过类似的警告.

在这种情况下,有人知道这个警告是否有特定目的我忽略了吗?

dar*_*ioo 5

我猜是因为C是一种非常古老的语言,可以追溯到1972年,由于记忆和速度的限制,这是故意的.

它的定义方式,编译器必须对您的文件进行一次扫描,以了解编译所需的所有内容.不得不做两次通过会更加昂贵,因此这条规则一直存在至今.

此外,正如peoro所说,这条规则使编译器作者的生活更轻松.更不用说IDE的自动完成生活也会让它的生活变得更轻松.

因此,程序编写者的一个小麻烦意味着可以缩短编译器编写者和IDE制造商的生活.

哦,你的程序编译速度会更快.当你拥有数百万代码库时,这不错.