私はちょうどこのような外部関数を宣言するのextern「C」を使用して、いくつかのCコードを持って:extern "C"はC言語で効果がありますか?
extern "C" void func();
は、この有効なCですか?私はこの行でエラーが発生していますが、これが原因か他の何かであるかどうかはわかりません。
私はちょうどこのような外部関数を宣言するのextern「C」を使用して、いくつかのCコードを持って:extern "C"はC言語で効果がありますか?
extern "C" void func();
は、この有効なCですか?私はこの行でエラーが発生していますが、これが原因か他の何かであるかどうかはわかりません。
いいえ、無効です。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
が、これはCの呼び出し標準を使用するコンパイラ/リンカに指示するC++の表記法です。
通常、その行はプリプロセッサステートメントでラップされます。
#ifdef __cplusplus
extern "C" {
#endif
// stuff
#ifdef __cplusplus
}
#endif
Cでは無効です。前処理後に存在する場合、標準に従って診断が行われます。
C++の場合、これはネームマングリングに変わります。それがなぜ必要なのかについては、thisを参照してください。あなたはいくつかの詳細を投稿できますか?