Compilerwarnung (Stufe 1) C4807

Aktualisiert: November 2007

Fehlermeldung

'Operation': Unsichere Kombination von Typ 'Typ' und Bitfeld mit Vorzeichen des Typs 'Typ'
'operation' : unsafe mix of type 'type' and signed bitfield of type 'type'

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 boolidentisch 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;
   }
}