如何将C ++代码转换为C
我有一些C ++代码。 在代码中定义了许多类,它们的成员函数,构造函数,这些类的析构函数,很less的模板类以及大量的C ++东西。 现在我需要将源代码转换为纯C代码。
我有以下问题:
-
有什么工具可以将C ++代码和头文件转换为C代码吗?
-
我将不得不彻底重写代码(我将不得不删除构造函数,析构函数并将代码移入
init()
,deinit()
函数;将类更改为结构,将现有成员函数作为函数指针定义的结构,然后使用函数指针调用这些函数等)。 -
如果我必须自己手动进行转换,那么在从C ++转换到C时需要注意哪些C ++特定的代码 – 数据结构/语义?
确实有这样一个工具,Comeau的C ++编译器。 。 它会生成你不能手动维护的C代码,但这没有问题。 您将维护C ++代码,并且只是将其转换为C。
http://llvm.org/docs/FAQ.html#translatecxx
PS:我一点都没用过。 让我知道如果它的作品。
虽然你可以在C中执行OO(例如,通过在方法中添加theType *this
第一个参数,然后手动处理类似vtable的东西来进行多态),但作为一个devise,这样做永远不会特别令人满意,而且看起来很丑陋(即使有一些预处理器的黑客)。
我会build议至less看一个重新devise,以比较这是如何工作的。
总的来说,很大程度上取决于关键问题的答案:如果你有工作的C ++代码,为什么你需要C代替?
也许好的酒吧会做?
编译器由两个主要的块组成:“前端”和“后端”。 编译器的前端分析源代码,并构build某种forms的源代码的“中间表示”,这比源代码更容易通过机器algorithm进行分析(即源代码,例如C ++被devise为帮助人类程序员编写代码,中介forms被devise为帮助简化分析所述中介forms的algorithm更简单)。 编译器的后端采用中间forms,然后将其转换为“目标语言”。
现在,通用编译器的目标语言是各种处理器的汇编语言,但是没有什么能阻止编译器后端以其他语言生成代码,只要目标语言(至less)像通用CPU汇编器。
现在,正如你可以想象的那样,C肯定和CPU的汇编程序一样灵活,从C ++到C的编译器从技术angular度来说实际上是没有问题的。
所以你有:C ++ — frontEnd —> someIntermediaryForm — backEnd —> C
你可能想要检查这些人: http ://www.edg.com/index.php?location = c_frontend (上面的链接只是可以做什么的信息,他们许可他们的前端数万美元)
PS据我所知,GNU没有这样一个C ++到C编译器,这完全击败了我(如果我正确的话)。 因为C语言相当小,内部机制相当简陋,所以C编译器需要像一个人一年的工作(我可以告诉你这个第一手原因,因为我可能几年前写了一个这样的编译器,它会产生一个[虚拟]堆栈机器中间代码),并能够拥有一个维护,最新的C ++编译器,而只需要编写一次C编译器将是一件好事情… …
这是一个古老的线程,但显然C++ Faq
有一个部分 。 如果联系作者,这显然会更新,所以从长远来看,这可能会更新。