Udostępnij za pośrednictwem


C6299

Ostrzeżenie C6299: jawne porównanie pola typu bit z typem Boolean przyniesie nieoczekiwane wyniki

Ostrzeżenie to wskazuje nieprawidłowe założenie, że pola wartości logicznej i bitowe są równoważne.Przypisanie wartości 1 do pola bitowego umieści 1 w jego pojedynczym bicie; jednak każde porównanie takiego pola bitowego do 1 obejmuje niejawne rzutowanie na typ całkowity ze znakiem.Rzutowanie to konwertuje przechowywaną wartość 1 na -1 i porównanie może przynieść nieoczekiwane wyniki.

Przykład

Poniższy kod generuje to ostrzeżenie:

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

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

Aby poprawić to ostrzeżenie, użyj pola bitowego w sposób przedstawiony w poniższym kodzie:

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