如何将C++代码转换为C语言

gol*_*ean 46 c c++ code-translation

我有一些C++代码.在代码中定义了许多类,它们的成员函数,构造函数,这些类的析构函数,很少的模板类和许多C++东西.现在我需要将源代码转换为普通的C代码.

我有以下问题:

  1. 有没有工具将C++代码和头文件转换为C代码?

  2. 我必须做的代码完全重写(我将不得不删除构造函数,析构函数和代码搬进了init(),deinit()功能;改变类的结构,使现有的成员函数中的新定义的结构函数指针,然后调用这些函数使用函数指针等.)?

  3. 如果我必须自己手动转换它,在进行从C++到C的转换时,我需要注意哪些C++特定的代码数据构造/语义?

MSa*_*ers 32

确实有这样一个工具,Comeau的C++编译器..它会生成无法手动维护的C代码,但这没问题.您将维护C++代码,并且只是即时转换为C.

  • 如果您的代码不使用异常和模板,您可能有机会获得cfront的旧副本来处理您的代码.但正如MSalters所说的那样丑陋:-) (2认同)
  • @MSalters,它完全没有意义,它是不可读的吗?就像机器代码不可读一样.你用C++编写**,然后当我们需要部署时,我们采用C++,将其转换为C,然后进行部署.然后你继续编辑C++代码,我们重复一遍.那么C有没有任何优势呢? (2认同)

pla*_*ler 16

http://llvm.org/docs/FAQ.html#translatecxx

PS:我根本没用过它.让我知道它是否有效.

  • 我尝试使用 LLVM 将 hello_world.cpp 转换为 C 文件。生成的 C 代码和机器代码一样丑陋。预处理器的包含都没有了。 (2认同)
  • @MikimotoH,它看起来是这样,因为它不是语法源翻译的语法。它实际上是一个可以输出到 c 的编译器,这意味着您仍然依赖于任何链接的 C++ 库。它真的最适合用于调试,或作为查看材料。顺便说一句:它可能很丑,但相信我它比机器代码更好,你至少可以从中学习。与任何反汇编相比,您可以更好地从 clang c++ 学习到 c。 (2认同)
  • 如果有人需要将一些C++代码编译成只有C compilter的奇怪机器/微控制器,那么它似乎仍然是一个很好的解决方案. (2认同)
  • @Cray:我尝试过,遗憾的是 LLVM c 后端不会转换为普通的 ANSI C 标准代码,而是 GNU C 编译器代码。这排除了许多仅限 ANSI C 编译器的芯片。 (2认同)
  • 从v3.1开始,C后端功能已被删除。“它有很多问题,以至于无法编译任何重要的程序。” (2认同)

Ric*_*ard 6

虽然您可以在C中执行OO(例如,通过向theType *this方法添加第一个参数,并手动处理类似vtables的多态性),但这在设计中从未特别令人满意,并且看起来很丑陋(即使有一些预处理器黑客攻击).

我建议至少要看一个重新设计,以比较这将如何工作.

总的来说,很大程度上取决于关键问题的答案:如果你有工作的C++代码,你为什么要C代替?

  • 作者的理由显然具有情境特征,但确实存在原因.有时,特定平台上不存在c ++编译器,或者由于某种原因可能无法使用c ++编译器.它也是一个非常优秀的学习工具. (6认同)

niu*_*ech 5

也许好的' cfront会做什么?

  • 据我所知,cfront在很长一段时间内都没有维护,不太可能处理现代C++代码. (4认同)