gpt4 book ai didi

c++ - C++ 是建立在 C 之上的吗?

转载 作者:可可西里 更新时间:2023-11-01 18:40:09 26 4
gpt4 key购买 nike

C++ 代码在编译前是否会转换为 C?

最佳答案

一些 C++ 编译器(最初的 cfront,Comeau C++)在编译期间使用 C 作为中间语言。大多数 C++ 编译器使用其他中间语言(例如 llvm)。

编辑:由于似乎对历史存在一些误解:“C with classes”开始使用名为“Cpre”的预处理器。当时,它被严格地视为 C 的一种方言,而不是一种独立的语言。 1983 年 12 月,人们开始将其视为一种独立的语言,并发明了 C++ 这个名称。碰巧的是,cfront 的开发始于 1983 年 4 月,因此与名称“C++”的使用几乎同时出现了一个合理可用的版本(对少数人而言)。不过,这似乎主要是巧合。

就生成 C 作为其输出而言,这在 Unix 上确实很常见。例如,Berkeley Pascal 编译器和至少几个 Fortran 编译器也生成 C 作为它们的输出。

然而,Cpre 和 Cfront 之间存在巨大差异。尽管两者都生成 C 作为它们的输出,但 Cpre 实际上没有自己进行语法检查——它寻找一些特定的东西,并对它们进行相对机械的翻译。直到C编译器查看结果,才真正进行语法分析。如果您的代码包含语法错误,几乎可以肯定它不会被捕获,直到 C 编译器解析 Cpre 的输出。

然而,Cfront 对源代码本身进行了完整的语法分析,因此(除了代码生成器中的错误)您永远不会看到来自 C 编译器的语法错误。 C 编译器仅用作代码生成器,因此无需重写 CFront 以适应不同的处理器、目标文件格式等。

如果您想了解更多细节,The Design and Evolution of C++ 的第 2 章几乎完全致力于“C with Classes”的时间框架(还有其他各种关于它的细节贯穿全书)。

关于c++ - C++ 是建立在 C 之上的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2226968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com