C6286
Warnung C6286: (<Konstante ungleich 0> || <Ausdruck>) ist immer eine Konstante ungleich 0. <Ausdruck> wird niemals ausgewertet und hat möglicherweise Nebeneffekte.
Diese Warnung gibt an, dass in einem Testkontext auf der linken Seite einer logischen OR-Operation eine Konstante ungleich 0 (null) ermittelt wurde. Der daraus resultierende Ausdruck ergibt immer TRUE. Zudem scheinen auf der rechten Seite des Ausdrucks Nebeneffekte vorzuliegen, die verloren gehen.
Diese Warnung gibt an, dass Sie die rechte Seite des Ausdrucks sorgfältig untersuchen sollten, um sicherzustellen, dass ggf. vorhandene Nebeneffekte, die für eine ordnungsgemäße Funktionalität erforderlich sind, nicht verloren gehen.
Die (!0 || <expression>)-Konstruktion wird häufig verwendet, um die Ausführung eines gesteuerten Blocks zu erzwingen.
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...
}
}
Im folgenden Code wird eine mögliche Lösung veranschaulicht, bei der die if-Anweisung 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...
}
}