Condividi tramite


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

Vedere anche

Riferimenti

Bitwise AND Operator: &

Logical OR Operator: ||