Condividi tramite


C6240

Aggiornamento: novembre 2007

C6240

avviso C6240: (<espressione> && <costante diversa da zero>) restituisce sempre il risultato di <espressione>. Si intendeva utilizzare l'operatore AND bit per bit?

L'avviso indica che un valore di costante diverso da zero e che non sia uno è stato rilevato a destra di un'operazione di AND logico in un contesto di test. L'espressione (n && 3), ad esempio, viene ridotta a (!!n), che è il valore booleano di n.

L'avviso generalmente indica un tentativo di controllare una maschera di bit in cui dovrebbe essere utilizzato l'operatore AND bit per bit (&). Non viene generato se la costante diversa da zero restituisce 1 a causa dell'impiego di tale valore per la scelta selettiva dei percorsi del codice.

Esempio

Il codice seguente genera questo avviso:

#include <stdio.h>
#define INPUT_TYPE 2

void f(int n)
{
   if (n && INPUT_TYPE) 
   {
      puts("boolean value of !!n is true");
   }
   else
   {
      puts("boolean value of !!n is false");
   }
}

Per risolvere il problema, utilizzare l'operatore AND bit per bit come illustrato nel codice seguente:

#include <stdio.h>
#define INPUT_TYPE 2

void f(int n)
{
   if ( (n & INPUT_TYPE) )
   {
      puts("bitmask true");
   }
   else
   {
      puts("bitmak false");
   }
}

Vedere anche

Riferimenti

Operatore & (Riferimenti per C#)