【发布时间】:2010-04-13 19:32:33
【问题描述】:
在 C# 和 Java 等语言中,无需在使用之前声明(例如)类。如果我理解正确,这是因为编译器对代码进行了两次传递。第一个它只是“收集可用的信息”,第二个它检查代码是否正确。
在 C 和 C++ 中,编译器只执行一次传递,因此此时所有内容都需要可用。
所以我的问题基本上是为什么在 C 和 C++ 中不这样做。是不是就不需要头文件了?
【问题讨论】:
-
C++ 编译器将按顺序读取 [也就是说,它将从上到下读取...] 这就是语言的工作原理。您关于“通过”两次然后查看函数原型的建议是可行的,但不幸的是,语言不是这样工作的。
-
C 作为一门语言在 30 多年前就已标准化,当时底层技术的能力远不如今天,而且成本也远高于今天。一个温和的建议:尝试了解一些事物的历史,并了解自从做出这些决定以来世界已经发生了巨大的变化,并且在您在开发工作中做出选择后将继续发生变化。总有一天,有人会想知道“WTF?!”关于你的决定.... ;-)
-
C++ 并不完全正确,它有一个部分 2-pass 编译器。在类声明中内联编写的类方法可以引用出现在其下方的类成员。不知道为什么他们没有保持一致。
-
Pascal 在 C 出现之前在小型计算机上很流行,它被明确设计为可以使用递归下降解析器一次性编译。
标签: c++ c compiler-construction declaration