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...
}
}
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für