rol*_*lls 1 c gcc compiler-warnings gcc-warning
正如标题所说,我知道导致此错误的原因,但我想知道为什么编译器会在这种情况下提供它.
例如:
main.c中
void test(){
test1();
}
void test1(){
...
}
Run Code Online (Sandbox Code Playgroud)
会给出一个隐式声明警告,因为编译器在读取它的声明之前会调用test1(),我可以看到这个明显的问题(不知道返回类型等),但为什么编译器不能做一个简单的传递获取所有函数声明,然后编译删除这些错误的代码?这看起来很简单,我不相信我在其他语言中看到过类似的警告.
在这种情况下,有人知道这个警告是否有特定目的我忽略了吗?
我猜是因为C是一种非常古老的语言,可以追溯到1972年,由于记忆和速度的限制,这是故意的.
它的定义方式,编译器必须对您的文件进行一次扫描,以了解编译所需的所有内容.不得不做两次通过会更加昂贵,因此这条规则一直存在至今.
此外,正如peoro所说,这条规则使编译器作者的生活更轻松.更不用说IDE的自动完成生活也会让它的生活变得更轻松.
因此,程序编写者的一个小麻烦意味着可以缩短编译器编写者和IDE制造商的生活.
哦,你的程序编译速度会更快.当你拥有数百万代码库时,这不错.