C6239
Ostrzeżenie C6239: (<non-zero constant> && <expression>) zawsze ma wynik <expression>.Czy zamierzasz korzystać z operatora bitowego and?
To ostrzeżenie wskazuje, że stała, niezerowa wartość różna od jeden, została wykryta po lewej stronie operacji logicznej AND, która występuje w kontekście testowania.Na przykład, wyrażenie ( 2 && n ) jest sprowadzane do (!!n), które jest wartością logiczną n.
Zazwyczaj to ostrzeżenie wskazuje na próbę sprawdzenia maski bitowej, w której powinien być używany operator bitowy AND (&) i nie jest generowane, jeśli niezerowa stała ma wartość 1, z powodu selektywnego wyboru ścieżki kodu.
Przykład
Poniższy kod generuje to ostrzeżenie:
#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");
}
}
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( ( INPUT_TYPE & n ) )
{
puts("bitmask true");
}
else
{
puts("bitmask false");
}
}