有没有一种方法可以将C++编译成C代码?[关闭]

r8uurelv  于 2023-04-01  发布在  其他
关注(0)|答案(5)|浏览(143)

已关闭,此问题需要更focused,目前不接受回答。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

两年前关闭了。
社区在2天前审查了是否重新讨论此问题,并将其关闭:

不适用于此网站我们不允许提出寻求书籍、工具、软件库等建议的问题。您可以编辑问题,以便通过事实和引用来回答。

Improve this question
我有一个程序,它是由用户配置使用C类和相同的类应该用来配置一个程序,只能使用C99(开放CL语言)的子集。
所以我的问题是:有没有办法把C
编译成C-Code?
开源会很棒!

wwtsj6pe

wwtsj6pe1#

您可以使用clang C++前端生成llvm字节码,并使用llc发出C代码,请参阅llc doc,特别是c选项。两者都是开源的,具有类似BSD的许可证。

zxlwwiss

zxlwwiss2#

C++ FAQ有一个可能性列表:可以把C++转换成C吗?
简而言之,它说你不能期望这会给予你特别可读的代码。多重继承、虚函数解析、模板、运算符重载等等。在纯C语言中没有一种简洁的方式来表达这些概念。如果你所追求的是可编译的C语言,那么这可能是你要走的路。

nfg76nw0

nfg76nw03#

Comeau编译器似乎能够做到这一点。来自Wikipedia“Comeau C/C++不是直接产生可执行文件,而是输出C代码,需要一个单独的C编译器才能产生最终的程序。”
不过,我从来没试过。

mznpcxlj

mznpcxlj4#

  1. VisualGBD是一个Visual Studio扩展,允许您在嵌入式平台上进行编译开发。它不是免费的,但有一个试用版。如果它适用于您的应用程序,我认为是值得的。
    https://visualgdb.com
  2. LLVM是一个很好的选择,但它已经停止了。(C后端已经复活here,并且 * 可能 * 使以下指令工作)
    http://llvm.org/docs/FAQ.html#translatecxx
    它可以处理一些代码,但对于更复杂的实现会失败,因为它还没有完全更新到一些现代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.cp -o CPPtoC.bc -emit-llvm
llc -march=c CPPtoC.bc -o CPPtoC.c

请注意,它创建了一个GNU风格的C,而不是真正的ANSI C。在你对代码投入太多之前,你会想测试一下它对你是否有用。例如,一些嵌入式系统只接受ANSI C。
还要注意的是,它会生成功能强大但相当不可读的代码。我建议注解和维护您的C++代码,而不要担心最终的C代码。

  1. Comeau网站不幸死亡。Coherent是建立在comeau上的,可能会提供一些选项。他们有预建的VM,最近一直维护到2018年。
    https://www.autometer.de/unix4fun/coherent/#inst_coh
  2. Cfront可用,但很长时间没有更新
    http://www.softwarepreservation.org/projects/c_plus_plus/cfront/release_3.0.3/source/cfront_3_0_3.tgz
m0rkklqb

m0rkklqb5#

  1. Comeau Computing提供了一个基于Edison Design Group前端的编译器,可以输出C代码。
  2. LLVM是一个可下载的编译器,它可以发出C代码。请参阅这里和这里。这里是一个通过LLVM将C++转换为C的例子。
  3. Cfront是C的原始实现,由Bjarne Stroustrup和AT&T的其他人完成,生成C代码。然而,它有两个问题:自从90年代中期以来,它就很难获得许可证,当时它开始经历一迷宫所有权变更,同时开发也停止了,因此它没有修复错误,也不支持任何新的语言功能(例如,异常,名称空间,RTTI,成员模板)。
    1.与流行的神话相反,在撰写本文时,还没有一个版本的g
    将C++转换为C。这样的事情似乎是可行的,但我不知道有人实际上做过(还没有)。
    http://www.cs.technion.ac.il/users/yechiel/c++-faq/convert-to-c.html

相关问题