C6240
ostrzeżenie C6240: (<expression> && <non-zero constant>) zawsze ma wynik <expression>.Czy zamierzasz korzystać z operatora bitowego and?
To ostrzeżenie wskazuje, że po prawej stronie operacji logicznej and, która pojawia się w testowanym kontekście, wykryta została niezerowa wartość, inna niż 1.Na przykład, wyrażenie (n && 3) sprowadza się do (!!n), które jest wartością logiczną n.
Zazwyczaj to ostrzeżenie wskazuje próbę sprawdzenia maski bitowej w której powinien być użyty operator bitowy AND (&).Nie jest generowane, gdy niezerowa wartość stała wynosi 1 ze względu na jej użycie do selektywnego wybierania ścieżek kodu.
Przykład
Poniższy kod generuje to ostrzeżenie:
#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");
}
}
Aby poprawić to ostrzeżenie, użyj operatora bitowego AND, jak pokazano w poniższym kodzie:
#include <stdio.h>
#define INPUT_TYPE 2
void f(int n)
{
if ( (n & INPUT_TYPE) )
{
puts("bitmask true");
}
else
{
puts("bitmak false");
}
}