cl_*_*ger 18 c c++ compiler-construction compiler-theory
我有一个程序,由用户使用C++类配置,并且应该使用相同的类来配置只能使用C99(Open CL语言)子集的程序.
所以我的问题是:有没有办法将C++编译成C-Code?
开源会很棒!
ton*_*nio 18
您可以使用clang C++前端生成llvm字节码,并使用llc发出C代码,请参阅llc doc,尤其是c选项.两者都是开源的,BSD就像许可证一样.
Oli*_*rth 16
C++ FAQ有一个可能的列表:是否可以将C++转换为C?.
简而言之,它表示您不能指望这会给您特别易读的代码.想想所涉及的复杂性; 多重继承,虚函数解析,模板,操作符重载,等等,等等.有没有干净的表达纯C.这些概念如果所有你后是编译的C,虽然的简洁的方式,那么这可能是途中走.
VisualGBD 是一个 Visual Studio 扩展,允许您为嵌入式平台进行编译开发。它不是免费的,但有试用版。如果它适合您的应用程序,我认为值得。
LLVM是一个不错的选择,但它已停止使用。(C后端已在这里复活,并且可以使以下指令起作用)
http://llvm.org/docs/FAQ.html#translatecxx
它可以处理一些代码,但对于更复杂的实现会失败,因为它尚未针对某些现代 C++ 约定进行完全更新。因此,请尝试经常编译代码,直到您了解允许的内容。
对于版本 9.0.1,命令行的使用语法如下:
clang -c CPPtoC.cpp -o CPPtoC.bc -emit-llvm
clang -march=c CPPtoC.bc -o CPPtoC.c
Run Code Online (Sandbox Code Playgroud)
对于旧版本(不确定过渡版本),请使用以下语法:
llvm-g++ -c CPPtoC.cp -o CPPtoC.bc -emit-llvm
llc -march=c CPPtoC.bc -o CPPtoC.c
Run Code Online (Sandbox Code Playgroud)
请注意,它创建了 GNU 风格的 C,而不是真正的 ANSI C。在您对代码投入过多之前,您需要测试这是否对您有用。例如,某些嵌入式系统仅接受 ANSI C。
另请注意,它会生成功能正常但相当不可读的代码。我建议注释并维护您的 C++ 代码,而不用担心最终的 C 代码。
不幸的是,科莫网站已经关闭。Coherent 基于 comeau 构建,可能会提供一些选项。他们预先构建了虚拟机,并于 2018 年进行了维护。
Cfront可用但已经很久没有更新了