前のページ次のページ上に戻るホーム SophiaFramework 2.0

3.1. ブール型

SophiaFramework ではブール型を Bool により表現します。


typedef         unsigned char       Bool;

typedef         Bool&               BoolRef; 

typedef         Bool*               BoolPtr;

typedef         Bool**              BoolHandle;

typedef         const Bool          ConstBool;

typedef         const Bool&         ConstBoolRef; 

typedef         const Bool*         ConstBoolPtr;

typedef         const Bool**        ConstBoolHandle;



#define         TRUE                1

#define         FALSE               0



#define         ON                  1

#define         OFF                 0

Bool 値を返す関数は、真を表すのに必ずしも TRUE=1 を返すわけではありません。 C 言語の慣例に従い 0 以外の値は真として扱われますので、 Bool 値を比較するときは TRUE との比較はしないでください。


if (IsDigitChar(ch) == TRUE) { ... }   // よくない例

if (IsDigitChar(ch)) { ... }           // 正しい例

また、C 言語の慣例ではブール値は int 型で表現しますが、 フレームワークの Bool 型は実際には unsigned char 型であることにも注意してください。 このことが重要になるのは次のようなコードを書くときです。


Bool MyFunction(SIntN flag) {

    return (flag & 0x4000);   // よくない例

}

上記の例ではブール値を返しているつもりですが、 Bool 型が実際には unsigned char であるため、 常に 0 (FALSE) が返されることになり、正しい実装ではありません。 次のように必ず論理値として返すような実装を心がけてください。


Bool MyFunction(int flag) {

    return (flag & 0x4000 != 0);   // 正しい例

}

      

// または

      

Bool MyFunction(int flag) {

    return !!(flag & 0x4000);      // 正しい例

}