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