C6316

avviso C6316: operatore errato: l'espressione testata è costante e diversa da zero.Utilizzare l'operatore AND bit per bit per determinare se i bit siano impostati

Questo avviso indica l'utilizzo di bit per bit-o (|) quando avrebbe dovuto essere utilizzato l'operatore AND bit per bit (&).L'operatore OR bit per bit aggiunge bit all'espressione risultante, laddove AND bit per bit seleziona solo i bit in comune tra i due operatori.È necessario eseguire test di flag con un operatore AND bit per bit oppure un test di uguaglianza.

Esempio

Il codice seguente genera questo avviso:

#define INPUT_VALUE 2
void f( int Flags)
{
  if (Flags | INPUT_VALUE) // warning
  {
    // code
  }
}

Per risolvere il problema, utilizzare il codice seguente:

#define ALLOWED 1
#define INPUT_VALUE 2

void f( int Flags)
{
  if ((Flags & INPUT_VALUE) == ALLOWED)
  {
    // code
  }
}