ユーザーがC++クラスを使用して構成するプログラムがあります。同じクラスを使用して、C99(Open CL言語)のサブセットのみを使用できるプログラムを構成する必要があります。
だから私の質問は:C ++をCコードにコンパイルする方法はありますか?
オープンソースは素晴らしいでしょう!
ユーザーがC++クラスを使用して構成するプログラムがあります。同じクラスを使用して、C99(Open CL言語)のサブセットのみを使用できるプログラムを構成する必要があります。
だから私の質問は:C ++をCコードにコンパイルする方法はありますか?
オープンソースは素晴らしいでしょう!
C ++ FAQには可能性のリストがあります:C ++をCに変換することは可能ですか?。
要するに、これがあなたに特に読みやすいコードを与えることを期待することはできないということです。関係する複雑さを考えてください。多重継承、仮想関数の解決、テンプレート、演算子のオーバーロードなど。これらの概念を純粋なCで表現するための明確で簡潔な方法はありません。ただし、コンパイル可能なCだけが必要な場合は、これがおそらく次の方法です。行く。
Comeauコンパイラはそれを実行できるようです。ウィキペディアから「実行可能ファイルを直接生成するのではなく、Comeau C / C ++はCコードを出力し、最終的なプログラムを生成するために別のCコンパイラを必要とします。」
しかし、私はそれを試したことがありません。
VisualGBDは、組み込みプラットフォーム用のコンパイルで開発できるVisualStudio拡張機能です。無料ではありませんが、試用版があります。それがあなたのアプリケーションで機能するかどうかは、私の心の中で価値があります。
LLVMは良いオプションです。
http://llvm.org/docs/FAQ.html#translatecxx
一部のコードを処理しますが、一部の最新のC ++規則では完全に更新されていないため、より複雑な実装では失敗します。したがって、何が許可されているかがわかるまで、コードを頻繁にコンパイルしてみてください。
コマンドラインからの使用法sytaxは、バージョン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
これは、真のANSI CではなくCのGNUフレーバーを作成することに注意してください。コードに多額の投資をする前に、これが役立つことをテストする必要があります。たとえば、一部の組み込みシステムはANSICのみを受け入れます。
また、機能的ではあるがかなり読めないコードを生成することにも注意してください。最終的なCコードについて心配することなく、C++コードにコメントを付けて維持することをお勧めします。
コモーサイトは残念ながら死んでいます。Coherentはコモーに基づいて構築されており、いくつかのオプションを提供する場合があります。彼らは2018年まで維持されているVMを事前に構築しています。
CLangは利用可能ですが、長い間更新されていません
http://www.cs.technion.ac.il/users/yechiel/c++-faq/convert-to-c.html