小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


VC++のBOOLとbool型の違い

はじめに

Visual C++において、BOOL型とbool型は微妙に違います。

BOOLはint型、boolはbool型

以下のようなサンプルプログラムで違いを見てみます。

  bool hoge = FALSE;  // false
  BOOL fuga = FALSE; // 0 
  int iSize;

  iSize = sizeof(hoge);
  // > 1byte
  iSize = sizeof(fuga);
  // > 4byte

bool型はtrue/falseの2つの値をとるboolean型です。反対に、BOOL型は実際にはint型で、FALSE=0となります。
f:id:replication:20140411215416p:plain

BOOL型とbool型はサイズが違う

BOOL型は4byteですが、bool型は1byteになります。

warning C4800の警告

bool型にBOOL型を代入するなど、型の違う変数に代入すると、以下のような警告がでます。

warning C4800: 'BOOL' : ブール値を 'true' または 'false' に強制的に設定します (警告の処理)