Freigeben über


C6299

Warnung C6299: Der explizite Vergleich eines Bitfelds mit einem Boolean-Typ führt zu unerwarteten Ergebnissen.

Diese Warnung weist auf die nicht zutreffende Annahme hin, dass Boolean- und Bitfelder äquivalent sind. Wenn Sie Bitfeldern den Wert 1 zuweisen, wird dieser Wert in dem zugehörigen einzigen Bit platziert. Ein Vergleich dieses Bitfelds mit 1 schließt jedoch eine implizite Umwandlung des Bitfelds in eine ganze Zahl mit Vorzeichen ein. Durch diese Umwandlung wird die gespeicherte 1 in eine -1 umgewandelt, und der Vergleich kann zu unerwarteten Ergebnissen führen.

Beispiel

Der folgende Code generiert diese Warnung:

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

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

Um diese Warnung zu korrigieren, verwenden Sie ein Bitfeld, wie im folgenden Code gezeigt:

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