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

krugob8w  于 2023-08-03  发布在  其他
关注(0)|答案(6)|浏览(82)

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

wyyhbhjk

wyyhbhjk1#

一些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对源代码本身进行了全面的语法分析,所以(除了代码生成器中的bug)您永远不会看到C编译器的语法错误。C编译器只是用作代码生成器,因此没有人需要重写CFront以适应不同的处理器,对象文件格式等。
如果你想了解更多细节,《C++的设计和进化》的第2章几乎完全是关于“C with Classes”的时间框架(书中还有其他各种细节)。

wlzqhblo

wlzqhblo2#

不,但像大多数神话一样,这有一丝真实性。最初的C类编译器(后来成为C++)被昵称为CFront,并翻译为C。

kb5ga3dv

kb5ga3dv3#

在大多数现代编译器中不是。
然而,最初的C++编译器实际上是一个预处理器。它生成C代码,然后由C编译器编译。

1hdlvixo

1hdlvixo4#

在早期的C编译器中,有些是这样做的。然而,自20世纪80年代末以来,我还没有见过C编译器以这种方式实现。

cwdobuhd

cwdobuhd5#

就像其他人回答的那样。没有。
但是,如果你想使用像C#这样的OOP语言,并将你的代码编译成C,我建议你看看Vala

am46iovg

am46iovg6#

标题似乎在问C是C的超集吗?你能在c编译器中转储任何c代码,它就能工作吗?在这种情况下,是的,有点...
一个主要的区别是C自动为你转换指针,C没有,你需要手动转换指针。
还有人记得别的吗
出于某种原因,我只记得将一个庞大的C项目转换为在C
下编译的可怕过程...

相关问题