多くのライブラリで次の行に出くわします。彼らは何のために良いですか?__ はいつ/どこでcplusplus
定義されますか?
#ifdef __cplusplus
extern "C" {
#endif
//...
#ifdef __cplusplus
}
#endif
多くのライブラリで次の行に出くわします。彼らは何のために良いですか?__ はいつ/どこでcplusplus
定義されますか?
#ifdef __cplusplus
extern "C" {
#endif
//...
#ifdef __cplusplus
}
#endif
__cplusplus
C++コード用に定義されています。CコードとC++コードを混在させる必要がある場合があります。これには多くの理由が考えられます。たとえば、まったく新しいC ++ 0xプロジェクトで使用したい、ずっと前にCで作成されたドライバーがあります。
すべての関数の型と名前には言語のつながりがあります。CとC++関数には違いがあります。これは、Cにはオーバーロードする関数名がないため、関数名はCでは一意の識別子として機能できますが、C++では機能しません。これは関数マングリングと呼ばれます。
Cで名前をマングルする必要がないため、を使用extern "C"
すると、コンパイラはリンケージ用のパラメータ情報の追加を省略します。
C ++標準は、7.5パラ3で明示的に述べています。
すべての実装は、Cプログラミング言語「C」で記述された関数へのリンク、およびC++関数「C++」へのリンクを提供するものとします。
complex sqrt(complex); //C++ linkage by default
extern "C" {
double sqrt(double);//C linkage
}