Предупреждение C6286

('ненулевая константа' || "expression") всегда является ненулевой константой. Выражение никогда не вычисляется и может иметь побочные эффекты

Замечания

Это предупреждение указывает, что в левой части логического или тестового контекста обнаружена константа без нуля. Результирующее выражение всегда вычисляется как TRUE. Кроме того, правая сторона выражения, как представляется, имеет побочные эффекты, и они будут потеряны.

Вы можете тщательно изучить правую сторону выражения, чтобы убедиться, что любые побочные эффекты, необходимые для правильной функциональности, не теряются.

(!0 || <expression>) Конструкция обычно используется для принудительного выполнения управляемого блока.

Имя анализа кода: NONZEROLOGICALORLOSINGSIDEEFFECTS

Пример

Следующий код создает это предупреждение:

#include <stdlib.h>
#include <stdio.h>
#define INPUT_TYPE 1

int test();

void f()
{
  if (INPUT_TYPE || test())
  {
    puts("INPUT_TYPE == 1, expression not evaluated");
    // code...
  }
  else
  {
    puts("INPUT_TYPE == 0. Call to test() returned 0");
    // code...
  }
}

В следующем коде показано одно возможное решение, разбив if оператор на две отдельные части:

#include <stdlib.h>
#include <stdio.h>
#define INPUT_TYPE 1

int test();

void f()
{
  int i;
  if (INPUT_TYPE)
  {
    i = test();
    // code...
  }
  else
  {
    puts("INPUT_TYPE false");
    // code...
  }
}

См. также

Оператор логического ИЛИ: ||