C6299

Mise à jour : novembre 2007

C6299

Avertissement C6299 : La comparaison explicite d'un champ de bits avec un type Boolean provoque des résultats inattendus

Cet avertissement indique une hypothèse incorrecte selon laquelle les types Boolean et les champs de bits sont équivalents. L'assignation de la valeur 1 aux champs de bits place 1 dans son bit unique ; toutefois, toute comparaison de ce champ de bits avec la valeur 1 inclut un cast implicite du champ de bits sur un entier signé. Ce cast convertit la valeur 1 stockée en une valeur -1 et la comparaison peut générer des résultats inattendus.

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 de bits comme indiqué dans le code suivant :

void f ()
{
  if(bitType.flag==bitType.done)
  {
    // code...
  }
}