编译器由两个主要模块组成:“前端”和“后端”。编译器的前端分析源代码并构建所述源代码的某种形式的“中间表示”,与源代码相比,机器算法比源代码更易于分析(即,源代码(例如C ++)旨在为了帮助人类程序员编写代码,中介表单旨在帮助简化分析所述中介表单的算法)。编译器的后端采用中介形式,然后将其转换为“目标语言”。
现在,通用编译器的目标语言是各种处理器的汇编语言,但是没有什么可以禁止编译器后端以其他某种语言生成代码的,只要该目标语言(至少)具有与通用CPU汇编器。
现在,您可以想象到,C绝对像CPU的汇编程序一样灵活,因此从技术角度来看,从C ++到C编译器的实现确实没有问题。
因此,您拥有:C ++ --- frontEnd ---> someIntermediaryForm --- backEnd ---> C
您可能要检查这些家伙出来:http://www.edg.com/index.php?location=c_frontend (上面的链接只是为信息什么可以做了,他们许可的数万美元的前端)
PS据我所知,GNU还没有这样的C ++到C编译器,这完全打败了我(如果我对此表示正确)。由于C语言很小,而且其内部机制还很初级,因此C编译器需要进行类似人工工作的工作(我可以直接告诉您,因为我可能在多年前就写了这样的编译器,并且生成了[ [虚拟]堆栈机中间代码),并且能够拥有一个维护良好的最新C ++编译器,而只需要编写一次C编译器,那将是一件很棒的事...