C6235
Warnung C6235: (<Konstante ungleich 0> || <Ausdruck>) ist immer eine Konstante ungleich 0.
Diese Warnung gibt an, dass in einem Testkontext auf der linken Seite einer logischen OR-Operation ein Konstantenwert ungleich 0 (null) ermittelt wurde, der nicht 1 ist. Die rechte Seite der logischen OR-Operation wird nicht ausgewertet, da der sich ergebende Ausdruck immer zum Ergebnis true ausgewertet wird. Dies wird als "Kurzschlussauswertung" bezeichnet.
Ein Konstantenwert ungleich 0 (null), der nicht 1 ist, lässt darauf schließen, dass der bitweise Operator AND (&) absichtlich verwendet wurde. Diese Warnung wird in der allgemeinen Vorgehensweise nicht verwendet, wenn die Konstante ungleich 0 (null) den Wert 1 aufweist, da diese für das selektive Aktivieren von Codepfaden verwendet wird. Sie wird jedoch generiert, wenn die Konstante ungleich 0 (null) zum Ergebnis 1 ausgewertet wird, z. B. 1+0.
Beispiel
Im folgenden Code wird diese Warnung generiert, da INPUT_TYPE 2 ist:
#define INPUT_TYPE 2
void f(int n)
{
if(INPUT_TYPE || n) //warning 6235 issued
{
puts("Always gets here");
}
else
{
puts("Never gets here");
}
}
Im folgenden Code wird der bitweise Operator AND (&) verwendet, um die Warnung zu korrigieren:
#define INPUT_TYPE 2
void f(int n)
{
if((INPUT_TYPE & n) == 2)
{
puts("bitwise-AND comparison true");
}
else
{
puts("bitwise-AND comparison false");
}
}