C++ライブラリの一部としてCヘッダーがあります。
このCヘッダーは、Cコンパイラーまたはextern "C" { ... }
ブロック内のC++コンパイラーによってコンパイルされた場合にのみ意味があり、そうでない場合、未解決のリンクエラーが発生します。
私は次のようなブロックを追加しようと思いました:
#ifdef __cplusplus
#error "Compiling C bindings with C++ (forgot 'extern \"C\"'?)"
#endif
cヘッダーでは、残念ながら__cplusplus
マクロはextern "C" { ... }
ブロック内でも定義されています。
この状態を正しく検出する別の方法はありますか?
一般的な方法は、クライアントコードがヘッダーをextern "C"
でラップすることを要求するのではなく、条件付きで自分でラップすることです。例えば:
#ifdef __cplusplus
extern "C" {
#endif
// Header content
#ifdef __cplusplus
}
#endif
これにより、ヘッダーを含める以外に何もすることなく、クライアントコードが自動的に修正されます。