Поделиться через


C6299

Обновлен: Ноябрь 2007

C6299

Предупреждение C6299: явное сравнение битового поля с логическим типам приведет к непредвиденным результатам.

Это предупреждение указывает на неверное предположение о том, что логические и битовые поля эквивалентны. Если присвоить значение 1 битовому полю единица будет помещена в бит этого поля, но при любом сравнении этого битового поля оно будет неявно приведено к целому числу со знаком. При приведении сохраненное значение будет преобразовано из 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...
  }
}