いろきゅうの(元)はてなダイアリー

はてなダイアリーから移行中…

BOOLとbool

VC++を触っていると、タイトルのようにC++の「bool」と、PlatformSDK内で定義してある「BOOL」に遭遇します。
これ、結構ワナが待ち構えてたりしまして、「bool」は1バイトで(VC++5.0以降)、「BOOL」は4バイト(※"typedef int BOOL;") だったりするんですよね…。初めて知ったときはビックリしました。

true と false しか入らないんだから、1バイトの"bool"で十分すぎるほどじゃないか〜、なんて思ってみたりもしますが、私は "BOOL" の方が好きだったりします。
理由としては、こんなコードを書いてみたとき…

// あるbitが立ってるのかなー?
bool EnableFlg1(const DWORD dw)
{
  return dw & 0x00080000;
}

BOOL EnableFlg2(const DWORD dw)
{
  return dw & 0x00080000;
}

int main()
{
  if(EnableFlg1(何かの値))
    〜;
  else
    〜;

  return 0;
}

こんな感じのコードの場合、EnableFlg1() は 戻り値が bool なので「dw & 0x00080000」 の結果が1バイトに収まりません。なので、勝手に1バイト化しちゃうゾと warning が出るのに対して、EnableFlg2() は特に警告を出しません。戻り値の型が4バイトですからね〜。

アセンブラコード的にも、EnableFlg1() は、余分なものがちょっと付いてしまっているような感じです。(多分。詳しくはわからん)


で、ですよ?
この文章書いてる途中で、何が書きたかったのか良くわからなくなってきたので、今日の更新は、これで終わりの方向で。(何