C6239
Aggiornamento: novembre 2007
C6239
avviso C6239: (<costante diversa da zero> && <espressione>) 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 sinistra di un'operazione di AND logico in un contesto di test. L'espressione ( 2 && n ), 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 (&) e 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(INPUT_TYPE && n) // warning 6239
{
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( ( INPUT_TYPE & n ) )
{
puts("bitmask true");
}
else
{
puts("bitmask false");
}
}