C++代码在编译之前会被转换为C吗?

最佳答案

一些C++编译器(原始cfront,Comeau C++)在编译过程中使用C作为中间语言。大多数C++编译器使用其他中间语言(例如llvm)。

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

至于产生C作为输出,这在Unix上确实很普遍。仅举例来说,Berkeley Pascal编译器和至少两个Fortran编译器也将C作为其输出。

但是,Cpre和Cfront之间存在巨大差异。尽管Cpre和Cpre都将C作为输出,但实际上Cpre本身没有进行语法检查-它查找一些特定的内容,并对它们进行了相对机械的转换。直到C编译器查看结果后,才进行真正的语法分析。如果您的代码包含语法错误,则几乎可以确定,直到C编译器解析了Cpre的输出后,该错误才会被捕获。

但是,Cfront对源代码本身进行了完整的语法分析,因此(缺少其代码生成器中的错误)您将永远不会看到C编译器的语法错误。 C编译器只是用作代码生成器,因此不需要重写CFront即可容纳不同的处理器,目标文件格式等。

如果您想了解更多细节,《 C++的设计和演化》的第2章几乎完全致力于“带有类的C”时间框架(并且在本书中还涉及到许多其他细节)。

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

10-12 12:36