Avviso C6239

('costante non zero' && 'expression') restituisce sempre il risultato di 'expression'. Si intende usare l'operatore bit per bit e ?

Osservazioni:

Questo avviso indica che un valore costante diverso da zero, diverso da uno, è stato rilevato sul lato sinistro di un'operazione AND logica che si verifica in un contesto di test. Ad esempio, l'espressione ( 2 && n ) viene ridotta a (!!n), ovvero il valore booleano di n.

Questo avviso indica in genere un tentativo di controllare una maschera di bit in cui deve essere usato l'operatore AND (&) bit per bit e non viene generato se la costante non zero restituisce 1 a causa dell'uso per la scelta selettiva dei percorsi di codice.

Nome dell'analisi del codice: NONZEROLOGICALAND

Esempio

Il codice seguente genera questo avviso:

#include <stdio.h>
#define INPUT_TYPE 2
void f( int n )
{
   if(INPUT_TYPE && n) // warning C6239
   {
      puts("boolean value of n is true");
   }
   else
   {
      puts("boolean value of n is false");
   }
}

Per correggere questo avviso, usare l'operatore AND bit per bit (&) come illustrato nel codice seguente:

#include <stdio.h>
#define INPUT_TYPE 2
void f( int n )
{
   if( ( INPUT_TYPE & n ) )
   {
      puts("bitmask true");
   }
   else
   {
      puts("bitmask false");
   }
}

Vedi anche

Operatore &