C++ で bool を再定義する C ヘッダーを模倣できますか? 質問する

C++ で bool を再定義する C ヘッダーを模倣できますか? 質問する

私はプログラムを書いていますが、本当は C++ で書きたいのですが、bool を再定義する C ヘッダーを含める必要があります。

# define false 0
# define true  1
typedef int bool;

明らかな解決策は、ヘッダーを次のように編集することです。

#ifndef __cplusplus
# define false 0
# define true  1
typedef int bool;
#endif

しかし、残念ながら、ライブラリは読み取り専用なので、できません。

gcc にこの typedef を無視するように指示する方法はありますか? または、ほとんどの関数を C++ で記述してから、2 つの関数に対して C ラッパーを作成できますか? それとも、我慢して C で記述するべきでしょうか?

ベストアンサー1

ハッキングできるよ!

ライブラリ ( と呼びます) はfooLib、定義する権限を持つ何らかの型を使用していると考えていますbool。ライブラリにとって、boolは単なる識別子です。

したがって、代わりに別の識別子を使用するように強制することができます。

#define bool fooLib_bool
#include "fooLib.h"
#undef bool
#undef true
#undef false

コンパイラーは、問題のある行が次のように変換されたと認識します。

typedef int fooLib_bool;

fooLib_bool = int実際の ではなく型を使用するインターフェースに固執していますboolが、コードは実際には のプロパティに依存している可能性がありint、ライブラリバイナリはそのような想定を組み込んだ状態でコンパイルされているため、これを回避することは不可能です。

おすすめ記事