最初に私の説明をしなければなりません...
状況
stdbool.hは明らかに利用できないため、特に VC++ および C# の現在の IDE である Visual Studio 2008 では利用できないため、次の内容のbool.hを含むこのマイクロコントローラー コード (プレーンな古いC ) があります(以下を参照)。
#ifndef CUSTOM_BOOL #define CUSTOM_BOOL #ifdef __cplusplus extern "C" { #endif // #ifdef __cplusplus #ifndef bool #define bool unsigned char #endif #ifndef true #define true 1 #endif #ifndef false #define false 0 #endif #ifdef __cplusplus } #endif // #ifdef __cplusplus #endif // #ifndef CUSTOM_BOOL
ここで、そのマイクロコントローラー コードの機能がC# Projectに必要です。そのため、特定のマイクロコントローラー コードをラップするマネージ クラスを含む中間Visual C++ プロジェクトを作成しました。
- このラッパー プロジェクト (VC++) は C コードをいじるので、
#include "bool.h"
(間接的な方法で、それ自体が bool.h を含む別のヘッダーが含まれることを意味しますが、それは重要ではない詳細だと思います)。今ここに私の...
問題
bool.hは VC++ プロジェクトに含まれており、このプロジェクトは「実数」の bool を返す関数を提供する必要があるため (ここでの「実数」とは、VC++ プロジェクトを使用するときに C# によって bool として認識される型を意味します)、残念ながらbool
、VC++ コードの もプリプロセッサによってキャッチされるため、 に置き換えられunsigned char
ます。ここで何が起こるかというと、C# は最後に、unsigned char から bool への変換は許可されていないと文句を言います。これはすべて問題ありません。なぜこれが起こるのか理解しています。だからここに私の...
質問
この問題を「クリーンな」方法で解決するにはどうすればよいですか。私の現在の解決策は、bool.h をインクルードした後、VC++ コードが開始する直前に、次のように bool とその友人を再び定義解除することです。
#ifdef bool
#undef bool
#endif
#ifdef true
#undef true
#endif
#ifdef false
#undef false
#endif
それは機能しますが、それは私の適切なプログラミング方法の心を壊します。これを修正する適切な方法はありますか?それとも、問題はおそらく以前に発生していますか?BOOL
代わりにのようなものを定義する必要がありbool
ますか? interwebz で検索したところ、誰もが同意するCプロジェクト (C99 はサポートされていません) で bool (または BOOL?) を定義する一般的な「標準」の方法はありません。