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


C6285

Предупреждение C6285: (<ненулевая константа> || <ненулевая константа>) всегда является ненулевой константой. Предполагалось использовать оператор побитового И?

Данное предупреждение указывает, что в качестве аргументов операции логического ИЛИ, используемой в контексте проверки, обнаружены две константы больше единицы. Такое выражение всегда возвращает значение TRUE.

Константные значения, превышающие единицу, в качестве аргументов операции логического ИЛИ могут быть битовыми полями. Проверьте, не является ли более правильным использовать в подобной ситуации побитовый оператор "&".

Пример

Данное предупреждение создается в следующем коде:

#include <stdio.h>
#define     TESTED_VALUE    0x37
#define     MASK            0xaa

void f()
{
  if (TESTED_VALUE || MASK) 
  {
    puts("(TESTED_VALUE || MASK) True");
    // code...
  }
  else 
  {
    puts("(TESTED_VALUE || MASK) False");
    // code...
  }
}

Для устранения этого предупреждения используйте оператор побитового И (&), как указано в следующем коде:

#include <stdio.h>
#define     TESTED_VALUE    0x37
#define     MASK            0xaa

void f(int flag)
{
  if ((TESTED_VALUE & MASK)== flag)
  {
    puts("true");
    // code...
  }
  else
  {
    puts("false");
    // code...
  }
}

См. также

Ссылки

Bitwise AND Operator: &

Logical OR Operator: ||