Freigeben über


Warnung C6299

Der explizite Vergleich eines Bitfelds mit einem booleschen Typ führt zu unerwarteten Ergebnissen.

Hinweise

Diese Warnung gibt eine falsche Annahme an, derzufolge Booleans und Bitfelder gleichwertig wären. Das Zuweisen von 1 zu Bit-Feldern wird 1 in seinem einzelnen Bit platziert. Ein Vergleich dieses Bitfelds zu 1 enthält jedoch eine implizite Umwandlung des Bitfelds in ein signiertes Int. Diese Umwandlung konvertiert die gespeicherten 1 in ein -1, und der Vergleich kann unerwartete Ergebnisse liefern.

Codeanalysename: BITFIELD_TO_BOOL_COMPARISON

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 dargestellt:

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