Sdílet prostřednictvím


C6299

upozornění C6299: explicitní porovnávání bitového pole s typem Boolean může vést k neočekávaným výsledkům

Toto upozornění znamená, že je nesprávně předpokládána ekvivalence typu Boolean a bitových polí.Přidělení hodnoty 1 bitovému poli umístí tuto hodnotu do jediného bitu; při jakémkoliv porovnání tohoto bitového pole s hodnotou 1 však zahrnuje implicitní přetypování bitového pole na typ signed int.Toto přetypování převede uloženou hodnotu 1 na hodnotu -1, díky čemuž může porovnání vést k neočekávaným výsledkům.

Příklad

Následující kód generuje toto upozornění:

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

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

Chcete-li opravit toto upozornění, použijte bitové pole tak, jak je ukázáno v následujícím kódu:

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