C6285
avviso C6285: (<costante diversa da zero> || <costante diversa da zero>) è sempre una costante diversa da zero. Si intendeva utilizzare l'operatore AND bit per bit?
L'avviso indica che due valori di costanti, entrambi maggiori di uno, sono stati rilevati come argomenti per un'operazione di OR logico in un contesto di test. L'espressione è sempre TRUE.
Valori di costanti maggiori di uno indicano che gli argomenti per un'operazione di OR logico potrebbero essere campi di bit. Valutare se in un caso come questo potrebbe essere più appropriato un operatore & bit per bit.
Esempio
Il codice seguente genera questo avviso:
#include <stdio.h>
#define TESTED_VALUE 0x37
#define MASK 0xaa
void f()
{
if (TESTED_VALUE || MASK)
{
puts("(TESTED_VALUE || MASK) True");
// code...
}
else
{
puts("(TESTED_VALUE || MASK) False");
// code...
}
}
Per risolvere il problema, utilizzare l'operatore AND bit per bit (&) come illustrato nel codice seguente:
#include <stdio.h>
#define TESTED_VALUE 0x37
#define MASK 0xaa
void f(int flag)
{
if ((TESTED_VALUE & MASK)== flag)
{
puts("true");
// code...
}
else
{
puts("false");
// code...
}
}