我有一个程序,由用户使用C ++类和 应该使用相同的类来配置程序 只能使用C99(Open CL语言)的子集。
所以我的问题是: 有没有办法将C ++编译为C-Code? p>
开源会很棒!
答案 0 :(得分:18)
答案 1 :(得分:16)
C ++ FAQ提供了一系列可能性:Is it possible to convert C++ to C?。
简而言之,它表示您不能指望这会给您特别易读的代码。想想所涉及的复杂性;多重继承,虚函数解析,模板,运算符重载等等。没有 clean 简洁的方式在纯C中表达这些概念。如果你所有的都是可编译的C,不过,那么这可能是要走的路。
答案 2 :(得分:10)
Comeau编译器似乎能够做到这一点。从Wikipedia“而不是直接生成可执行文件,Comeau C / C ++输出C代码并需要一个单独的C编译器才能生成最终程序。”
我从未尝试过。
答案 3 :(得分:1)
http://www.cs.technion.ac.il/users/yechiel/c++-faq/convert-to-c.html
答案 4 :(得分:0)
VisualGBD是Visual Studio扩展,允许您为嵌入式平台进行编译开发。它不是免费的,但是有一个试用版。如果它适用于您的应用程序,我就觉得值得。
LLVM是一个不错的选择。
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
对于较旧的版本(不确定过渡版本),请使用以下命令 语法:
llvm-g++ -c CPPtoC.cp -o CPPtoC.bc -emit-llvm
llc -march=c CPPtoC.bc -o CPPtoC.c
请注意,它创建了C的GNU风格,而不是真正的ANSIC。您将 想要在投资之前先测试一下是否对您有用 在您的代码中大量使用。例如,某些嵌入式系统仅接受 ANSI C。
还请注意,它会生成功能强大但不可读的代码。一世 建议注释并维护您的C ++代码,不要担心 有关最终的C代码。
不幸的是,Comeau网站已死亡。相干建立在comeau上 并可能提供一些选择。他们已经预建了VM 一直维持到2018年。
CLang可用,但很长时间没有更新