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