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

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);      // 正しい例
}