在 C 编程语言中,我使用的所有语言修订版都在评估任何非声明性/赋值表达式之前强制执行了预先变量声明。C++ 似乎已经放弃了所有版本的这个要求。我也认识到更现代的 C 版本也放弃了这个要求,但我还没有使用任何这些标准。
我的问题是:有什么历史原因阻止 C 语言按需自由声明而不是预先声明?
显然,从工程的角度来看,我想到了许多原因,但对我来说,没有一个是特别合理的。
- 防止发生晦涩的编译器行为错误(例如无限解析循环、用于评估的大量内存膨胀或宏的一些奇怪的极端情况。)
- 防止不需要的编译器输出。这可能是任何东西,从混淆调试过程的符号输出和调试工具开发的简易性,到意外的堆栈存储顺序。
- 可读性。我也觉得这很难接受,因为 C 虽然与那个时代的其他语言相比是为了可读性而设计的,但几乎没有在其他任何地方强制执行这种类型的结构。(除非您将原型设计视为类似的强制执行,但如果我记得原型是在 '89 规范中添加的。)
- 实现复杂性和实际原因。这是我最倾向于相信的一个。作为工程师,我们必须做出某些考虑,以便在分配的时间范围内交付可行的产品。虽然我承认计算机科学和软件工程的专业领域都发生了巨大变化,但商业仍然是商业。归根结底,我确信贝尔想要一个可以在 Unix 编程环境中使用的成品来展示他们所取得的成就。
有没有人有任何好的资源来支持上述任何内容?我完全错过了什么吗?我们可以从黎明到黄昏进行推测,但我正在寻找好的硬参考。