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