2009-04-04 16 views
13

私はちょうどこのような外部関数を宣言するのextern「C」を使用して、いくつかのCコードを持って:extern "C"はC言語で効果がありますか?

extern "C" void func(); 

は、この有効なCですか?私はこの行でエラーが発生していますが、これが原因か他の何かであるかどうかはわかりません。

答えて

29

いいえ、無効です。Cコードで定義されている関数を参照するためにC++コードでのみ使用してください。 extern "C"ifdef __cplusplus/#endifブロックで囲む必要があります:

// For one function 
#ifdef __cplusplus 
extern "C" 
#endif 
void func(); 

// For more than one function 
#ifdef __cplusplus 
extern "C" 
{ 
#endif 

void func1(); 
void func2(); 

#ifdef __cplusplus 
} 
#endif 
11

が、これはCの呼び出し標準を使用するコンパイラ/リンカに指示するC++の表記法です。

通常、その行はプリプロセッサステートメントでラップされます。

#ifdef __cplusplus 
extern "C" { 
#endif 

// stuff 

#ifdef __cplusplus 
} 
#endif 
2

Cでは無効です。前処理後に存在する場合、標準に従って診断が行われます。

C++の場合、これはネームマングリングに変わります。それがなぜ必要なのかについては、thisを参照してください。あなたはいくつかの詳細を投稿できますか?

関連する問題