C6299

avviso C6299: il confronto esplicito di un campo di bit con un tipo Boolean produrrà risultati imprevisti

L'avviso indica una supposizione errata che campi di bit e tipi Boolean siano equivalenti.L'assegnazione del valore 1 ai campi di bit collocherà 1 nel relativo bit singolo. Tuttavia, qualsiasi confronto di questo campo di bit con 1 include un cast implicito del campo di bit a un valore int con segno.Il cast convertirà il valore 1 in un -1 e il confronto potrà condurre a risultati imprevisti.

Esempio

Il codice seguente genera questo avviso:

struct myBits
{
  short flag : 1;
  short done : 1;
  //other members
} bitType;

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

Per risolvere il problema, utilizzare un campo di bit come riportato nel codice seguente:

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