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...
}
}