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() は、余分なものがちょっと付いてしまっているような感じです。(多分。詳しくはわからん)
で、ですよ?
この文章書いてる途中で、何が書きたかったのか良くわからなくなってきたので、今日の更新は、これで終わりの方向で。(何