Avertissement C6299
La comparaison explicite d’un champ de bits à un type booléen génère des résultats inattendus
Notes
Cet avertissement indique une hypothèse incorrecte selon laquelle les champs booléens et bit sont équivalents. L’affectation de 1 à des champs de bits place 1 dans son bit unique ; toutefois, toute comparaison de ce champ de bits à 1 inclut un cast implicite du champ bit vers un int signé. Ce cast convertit le 1 stocké en -1 et la comparaison peut produire des résultats inattendus.
Nom de l’analyse du code : BITFIELD_TO_BOOL_COMPARISON
Exemple
Le code suivant génère cet avertissement :
struct myBits
{
short flag : 1;
short done : 1;
//other members
} bitType;
void f( )
{
if (bitType.flag == 1)
{
// code...
}
}
Pour corriger cet avertissement, utilisez un champ bit comme indiqué dans le code suivant :
void f ()
{
if(bitType.flag==bitType.done)
{
// code...
}
}