C6299

警告 C6299:对一个位字段和 Boolean 类型进行显式比较会产生意外的结果

此警告意味着错误地认为布尔域和位域是等效的。将 1 赋予位域会在它的单个位上放 1;然而,此位域与 1 的任意比较都包括一个将该位域强制转换为 signed int 的隐式操作。这种强制转换会将存储的 1 转换为 -1,因而这种比较会产生意外的结果。

示例

下面的代码生成此警告:

struct myBits
{
  short flag : 1;
  short done : 1;
  //other members
} bitType;

void f( )
{
  if (bitType.flag == 1) 
  {
  // code...
  }
}

若要更正此警告,请使用位域,如下面的代码所示:

void f ()
{
  if(bitType.flag==bitType.done)
  {
    // code...
  }
}