Поделиться через


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");
   }
}

См. также

Ссылки

Оператор & (Справочник по C#)