Freigeben über


Compilerwarnung (Ebene 1) C4807

"Operation": Unsichere Kombination von Typ "Typ" und signiertem Bitfeld des Typs "Typ"

Bemerkungen

Diese Warnung wird erzeugt, wenn ein vorzeichenbehaftetes Bitfeld der Länge 1 mit einer bool -Variablen verglichen wird. Da ein vorzeichenbehaftetes Bitfeld der Länge 1 nur die Werte -1 oder 0 enthalten kann, ist der Vergleich mit einem bool-Wert nicht unproblematisch. Keine Warnungen werden dagegen erzeugt, wenn bool -Werte mit vorzeichenlosen Bitfeldern der Länge 1 verglichen werden, da diese mit bool identisch sind und nur 0 oder 1 enthalten können.

Beispiel

Im folgenden Beispiel wird C4807 generiert:

// C4807.cpp
// compile with: /W1
typedef struct bitfield {
   signed mybit : 1;
} mybitfield;

int main() {
   mybitfield bf;
   bool b = true;

   // try..
   // int b = true;

   bf.mybit = -1;
   if (b == bf.mybit) {   // C4807
      b = false;
   }
}