编译器由两个主要块组成:“前端”和“后端”。编译器的前端分析源代码并构建所述源代码的某种形式的“中间表示”,这比源代码更容易通过机器算法分析(即,源代码例如 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 编译器需要大约一个人年的工作(我可以第一手告诉你,因为我可能几年前自己编写了这样一个编译器,它会产生一个 [ virtual] 堆栈机器中间代码),并且能够拥有一个维护的、最新的 C++ 编译器,而只需要编写一次 C 编译器将是一件很棒的事情......