Freigeben über


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");
   }
}

Siehe auch

Referenz

C-logische Operatoren