Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何转换C++;代码转换为C 我有一些C++代码。在代码中,定义了许多类,它们的成员函数、构造函数、类的析构函数、很少的模板类和大量C++类。现在我需要将源代码转换为纯C代码_C++_C_Code Translation - Fatal编程技术网

如何转换C++;代码转换为C 我有一些C++代码。在代码中,定义了许多类,它们的成员函数、构造函数、类的析构函数、很少的模板类和大量C++类。现在我需要将源代码转换为纯C代码

如何转换C++;代码转换为C 我有一些C++代码。在代码中,定义了许多类,它们的成员函数、构造函数、类的析构函数、很少的模板类和大量C++类。现在我需要将源代码转换为纯C代码,c++,c,code-translation,C++,C,Code Translation,我有以下问题: < > >有没有工具将C++代码和头文件转换成C代码?< /p> 我必须完全重写代码吗(我必须删除构造函数和析构函数,并将代码移到一些init(),deinit()中)functions;将类更改为结构,将现有成员函数作为新定义结构中的函数指针,然后使用函数指针等调用这些函数…) Li > 如果我必须手动转换它,在C++从C转换到时,需要注意哪些C++特定代码数据构造/语义? P>确实有这样的工具,科莫的C++编译器。它将生成您无法手动维护的C代码,但这没有问题。您将保持C

我有以下问题:

< > >有没有工具将C++代码和头文件转换成C代码?< /p>
  • 我必须完全重写代码吗(我必须删除构造函数和析构函数,并将代码移到一些
    init()
    deinit()中)
    functions;将类更改为结构,将现有成员函数作为新定义结构中的函数指针,然后使用函数指针等调用这些函数…)

  • <> Li >

    如果我必须手动转换它,在C++从C转换到

    时,需要注意哪些C++特定代码数据构造/语义?
    <> P>确实有这样的工具,科莫的C++编译器。它将生成您无法手动维护的C代码,但这没有问题。您将保持C++代码,并在即时转换为C。

    而您可以在C中做OO(例如,通过添加<代码> Type y>这个/<代码>第一个参数到方法,并手动处理像VTABLE一样的多态性),这从来不是一个特别令人满意的设计,而且看起来很难看(甚至有一些预处理器黑客)。 我建议至少考虑重新设计,以比较这将如何实现

    总体上,很大程度上取决于关键问题的答案:如果你有C++代码,为什么要用C代替?< /P> < P> < /P>

    它处理一些代码,但是对于更复杂的实现失败,因为它没有完全更新一些现代C++约定。所以,试着经常编译代码,直到你感觉到什么是允许的

    对于9.0.1版,命令行中的sytax用法如下:

    clang -c CPPtoC.cpp -o CPPtoC.bc -emit-llvm
    clang -march=c  CPPtoC.bc -o CPPtoC.c
    
    对于旧版本(不确定转换版本),请使用以下语法:

    llvm-g++ -c CPPtoC.cpp -o CPPtoC.bc -emit-llvm
    llc -march=c  CPPtoC.bc -o CPPtoC.c
    
    请注意,它创建了一个GNU风格的C,而不是真正的ANSI C。在您对代码投入过多之前,您需要测试它是否对您有用。例如,一些嵌入式系统只接受ANSI C

    还请注意,它会生成功能性但相当不可读的代码。我建议您评论和维护C++代码,而不必担心最终的C代码。
    编辑:虽然此功能的官方支持已被删除,但用户仍然可以使用Julia language devs提供的非官方支持来实现上述功能。

    也许好的ol'就可以了?

    编译器由两个主要模块组成:“前端”和“后端”。 编译器的前端分析源代码,并构建某种形式的所述源代码的“中间表示”,机器算法比源代码更容易分析(即,例如,源代码,例如C++被设计来帮助人类程序员编写代码,中间形式被设计为帮助简化分析所述中介形式的算法更容易)。 编译器的后端采用中间形式,然后将其转换为“目标语言”


    现在,通用编译器的目标语言是各种处理器的汇编语言,但是没有什么可以禁止编译器后端用其他语言生成代码,只要所述目标语言(至少)与通用CPU汇编语言一样灵活

    现在,你可以想象,C绝对是像CPU的汇编程序一样灵活,这样C++到C编译器就不可能从技术POV中实现。 <>你有:C++ +前端-->某种中间形式---后端-> c

    你可能想看看这些家伙: (上面的链接只是提供了可以做什么的信息,他们的前端许可费为数万美元)

    PS
    据我所知,GNU没有这样的C++编译器,这完全打败了我(如果我是正确的)。因为C语言相当小,内部机制相当简单,C编译器需要一个人一年的工作。(我可以直接告诉你这一点,因为我可能在几年前自己编写了这样一个编译器,它生成了一个[虚拟]堆栈机中间代码)一个维护的、最新的C++编译器,只需要编写一个C编译器就可以了。……< /p> < p>这是一个老线程,但是显然<>代码> C++ FAQ < /C>有一个。如果作者被联系起来,这个显然会被更新,所以从长远来看,这可能是最新的,但是以下是当前版本:

    取决于你的意思。如果你的意思是,有可能把C++转换成可读和可维护的C代码吗?那么,答案是没有-C++特征不直接映射到C,加上生成的C代码不是人类所遵循的。如果你的意思是,编译器有把C++转换成C的目的,用于编译到一个平台上。还没有C++编译器的ORM?那么你就很幸运了——继续阅读。 <> P>编译器将C++编译成C,对程序进行完全语法和语义检查,恰好使用C代码作为生成目标代码的方法。这样的编译器不仅仅是一种奇特的宏处理器。(请不要给我发电子邮件,声称这些是预处理器-它们不是-它们是完整编译器)。可以通过转换成C来实现ISO标准C++的所有特征,除了异常处理之外,它通常会产生与传统C++编译器生成的代码相比效率高的目标代码。 以下是一些执行C编译的产品: