所有C ++编译器都生成C代码吗?

可能是一个非常模糊和广泛的问题,但所有C ++编译器在将代码编译成机器代码之前是否先将代码编译成C语言?

因为C编译器几乎无处不在并且几乎可以在每个平台上使用,所以很多(编译的)语言在开发过程中经历了这个阶段以引导该过程。

在语言开发的早期阶段,看看语言是否可行,最简单的方法就是构建一个将语言转换为C然后让本机C编译器构建实际二进制文件的编译器。

这样做的问题在于语言特定的构造会丢失,因此可能会错过潜在的优化机会,因此第二阶段的大多数语言都会获得自己的专用编译器front end可以理解语言特定的构造,因此可以提供基于这些构造的优化策略。

二十多年前,C ++经历了第一阶段和第二阶段。 因此,很容易找到专用于C ++的编译器的“前端”,并生成一个直接传递给支持的中间格式。 但是在编译之前,您仍然可以找到转换为C(作为中间格式)的C ++版本。

不。 例如GCC来自C ++ – >汇编程序。 你可以通过在g ++中使用-S选项来看到这一点。

实际上,现在我考虑一下,我认为任何现代编译器都不会在ASM之前转到C语言。

No. C ++ – > C仅用于C ++开发和发展的最早阶段。 今天大多数C ++编译器直接编译为汇编程序或机器代码。 例如,Borland C ++直接编译为机器代码。

不。 这是一个神话 ,基于这样一个事实,即Stroustrup的早期版本的工作就是这样的。 C ++编译器生成的机器代码几乎与C编译器完全相同。

今天,我所知道的唯一能够创建C代码的C ++编译器是Comeau 。 嵌入式目标可能还有一两个,但它绝不是主流。

这不是标准定义的。 当然,编译C源是一种合理的方法。 它只需要目标平台具有合理程度的C编译器,因此它是一种高度可移植的方式。 缺点是速度。 可能编译速度和可能还有执行速度(由于例如虚拟函数的强制转换,导致编译器无法完全优化)将受到影响。 就在不久之前,有一家公司有一个非常好的C ++编译器就是这么做的。 不幸的是,我不记得该公司的名称和一个简短的谷歌没有带回名称。 该公司的所有者是ISO C ++委员会的积极参与者,您可以直接在主页上测试您的代码,该主页也有一些关于C ++的相当不错的资源。 编辑:我的一张海报就提醒了我。 当然,我在谈论Comeau。