Freigeben über


Warnung C6286

('Nicht-Nullkonstante' || 'Ausdruck') ist immer eine Konstante ungleich Null. "Ausdruck" wird nie ausgewertet und kann Nebenwirkungen haben

Hinweise

Diese Warnung gibt an, dass eine Nicht-Null-Konstante auf der linken Seite eines logischen Oder Vorgangs erkannt wurde, der in einem Testkontext auftritt. Der resultierende Ausdruck wird immer als WAHR ausgewertet. Darüber hinaus scheint die rechte Seite des Ausdrucks Nebenwirkungen zu haben, und sie gehen verloren.

Möglicherweise möchten Sie die rechte Seite des Ausdrucks sorgfältig untersuchen, um sicherzustellen, dass alle für die ordnungsgemäße Funktionalität erforderlichen Nebenwirkungen nicht verloren gehen.

Die (!0 || <expression>) Konstruktion wird häufig verwendet, um die Ausführung eines kontrollierten Blocks zu erzwingen.

Codeanalysename: NONZEROLOGICALORLOSINGSIDEEFFECTS

Beispiel

Der folgende Code generiert diese Warnung:

#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...
  }
}

Der folgende Code zeigt eine mögliche Lösung, indem eine Anweisung if in zwei separate Teile unterteilt wird:

#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...
  }
}

Siehe auch

Logischer OR-Operator: ||