Avertissement du compilateur (niveau 1) C4807
'operation' : mélange risqué de type 'type' et champ de bits signé de type 'type'
Cet avertissement est généré lors de la comparaison d’un champ de bits signé à un bit avec une variable bool
. Un champ de bits signé à un bit peut seulement contenir les valeurs -1 ou 0. Il est risqué de le comparer à bool
. Aucun avertissement n’est généré sur la combinaison de bool
et de champs de bits non signés à un bit, car ils sont identiques à bool
et ne peuvent contenir que 0 ou 1.
Exemple
L’exemple suivant génère l’erreur C4807 :
// 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;
}
}