2012-11-26 10 views
7

C++プロジェクトにCで書かれたヘッダをいくつか含める必要があります。ヘッダーファイルでは、restrict keywordが使用されており、C++の構文エラーにつながります。C++でコンパイルするときに `restrict`キーワードを取り除くマクロ

私はC++コンパイラでコンパイルしているかどうかをチェックし、この場合はrestrictキーワードを削除するプリプロセッサマクロを探しています。

答えて

10
#ifdef __cplusplus 
#define restrict 
#endif 

とする必要があります。 restrictはC++のキーワードではないため、#defineは問題ありません。

あるいは、Arne Mertzが示唆したように、より良いまだ、あなたはC++ソースでCヘッダを含め

extern "C" { 
#define restrict 
// include C headers here 
#undef restrict 
} 

を持っています。

+1

C言語でも 'restrict'を何も定義していないと(Cコンパイラが見る前にプリプロセッサがソースを変換するので)、それは意図したものではありません。 –

+0

@AlexeyFeldgendlerだから、 '#ifdef __cplusplus' ... – SomeWittyUsername

+3

で囲まれているのは、Cのヘッダをインクルードする前に'#define'をC++コードに入れておけば( 'extern" C {{' )、あなたは '#ifdef/#endif'を必要としません。 C++でlibを使用しようとする可能性があるので、最小限の侵襲性を試してください。つまり、Cコードを変更しないでください。代わりにC++コードを修正してください。 –

関連する問題