web-dev-qa-db-ja.com

gccに.cppファイルをCとしてコンパイルさせる

外部から提供された.cppファイルがあります。これは、C互換コードと少しのC++の混合でもあります。 C++コードは、C++機能を利用するためのCの単なるラッパーです。

それは使用しています #ifdef __cplusplusマクロはC++コードを保護するためのものです。残念ながら、gccを使用してコンパイルしようとすると、ファイルが終了しているため、C++として扱われます。 gccとg ++の違いを知っています。C++としてコンパイルしたくありません。

GccにこのファイルをCファイルとして処理させる方法はありますか?私は使ってみました--std=c99、しかしこれはC99がC++に対して有効ではないというエラーを正しく生成します。

ファイルの名前を.cに変更することはできますが、外部から提供され、元のコピーのままにしておくのはいいので、できればこれを避けたいと思います。

ありがとう!

37
ralight

Gccの-xオプションを使用すると、それに続くすべての入力ファイルの言語を指定できます。

$ gcc -x c your-file-name.cpp

その1つのファイルのみを特別なケースにしたい場合は、-x noneを使用して特別な扱いを止めることができます。

$ gcc -x c your-filename.cpp -x none other-file-name.cpp

your-filename.cppはCとしてコンパイルされますが、other-file-name.cppは拡張機能を使用してC++としてコンパイルされます)

60
Michael Mrozek

foo.cppをCファイルとしてコンパイルするには、foo.cという名前の新しいファイルを作成し、内容全体として次のように記述します。

#include "foo.cpp"

foo.cppの代わりにfoo.cをコンパイルします。

10年間のCVS履歴を保持しながら、一部のファイルでC++機能の使用を開始するために、これを逆方向に使用しました(。cファイルをC++としてコンパイル)。また、GCCだけでなく、各プラットフォームのネイティブコンパイラーを使用してビルドするため、6ダース以上のコンパイラーで-xに相当するコマンドを見つける必要がなく、ビルドシステムにそのコマンドを特定のファイルにのみ適用させることができました。 。

12
Rob Kennedy