Condividi tramite


Avviso C6299

Il confronto esplicito di un campo di bit con un tipo booleano genererà risultati imprevisti

Osservazioni:

Questo avviso indica un presupposto non corretto che i campi booleani e bit siano equivalenti. L'assegnazione di 1 a campi di bit inserisce 1 nel singolo bit; Tuttavia, qualsiasi confronto tra questo campo di bit e 1 include un cast implicito del campo di bit a un oggetto signed int. Questo cast convertirà l'oggetto archiviato 1 in -1 e il confronto può produrre risultati imprevisti.

Nome dell'analisi del codice: BITFIELD_TO_BOOL_COMPARISON

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 correggere questo avviso, usare un campo di bit come illustrato nel codice seguente:

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