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