プロジェクト向け(七)——C/C++の互換性

932 ワード

#if defined(__cplusplus)
#if defined(__cplusplus)
#if defined (__cplusplus)
extern "C"{
#endif

...

#if defined (__cplusplus)
}
#endif

C++コンパイラは関数のリロードをサポートする必要があるため、関数の名前が変更されるため、dllのエクスポート関数は通常標準Cで定義されます.これにより、CとC++の相互呼び出しが一般的になる.しかし、直接Cで呼び出すこともあり、コードを書き直したくない場合もあります.標準Cで書かれたdll関数定義をCとC++コンパイラの下でコンパイルできるようにします.通常は上記のフォーマットが使用されます(このフォーマットは多くの成熟したコードでよく見られます).
まず__cplusplusはC++コンパイラ内部で定義されたマクロであり、Cコンパイラを使用する場合、__cplusplusマクロは定義されません.CコンパイラかC++コンパイラかを区別するフラグとして使用できます.標準CでCコードを直接書けばいいです.一方、C++では、extern「C」を追加するか、extern「C」ブロックに含める必要があります.標準Cではextern"C"はサポートされておらず、コンパイルエラーが発生するため、プリコンパイル命令を使用して_cplusplusは,C++コンパイラを使用する場合にのみextern「C」を定義すると判断する.