0

重複の可能性:
C++ と C の組み合わせ - #ifdef __cplusplus はどのように機能しますか?

多くのライブラリで次の行に出くわします。彼らは何のために良いですか?__ はいつ/どこでcplusplus定義されますか?

#ifdef __cplusplus
    extern "C" {
#endif

//...

#ifdef __cplusplus
    }
#endif
4

1 に答える 1

4

__cplusplusC++コード用に定義されています。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
}
于 2012-09-24T11:51:20.617 に答える