C6239
Предупреждение C6239: (<ненулевая константа> && <выражение>) всегда равно результату <выражения>. Предполагалось использовать оператор побитового И?
Данное предупреждение означает, что в левой части операции логического И, выполняемой в контексте проверки, обнаружено ненулевое константное значение, отличное от единицы. Например, выражение ( 2 && n ) сокращается до (!!n), что является логическим значением n.
Это предупреждение обычно указывает на попытку проверить битовую маску, в которой вместо логического И должен использоваться оператор побитового И (&); предупреждение не создается, если ненулевая константа при вычислении дает значение 1, поскольку она используется для выбора ветвей кода.
Пример
Данное предупреждение создается в следующем коде:
#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");
}
}
Для устранения этого предупреждения используйте оператор побитового И (&), как указано в следующем коде:
#include <stdio.h>
#define INPUT_TYPE 2
void f( int n )
{
if( ( INPUT_TYPE & n ) )
{
puts("bitmask true");
}
else
{
puts("bitmask false");
}
}