Freigeben über


C6236

C6236

Warnung C6236: (<Konstante ungleich 0> || <Ausdruck>) ist immer eine Konstante ungleich 0.

Diese Warnung gibt an, dass in einem Testkontext auf der rechten Seite einer logischen OR-Operation ein Konstantenwert ungleich 0 (null) ermittelt wurde, der nicht 1 ist. Die linke 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, der nicht 1 ist, lässt darauf schließen, dass der bitweise AND-Operator (&) 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 n++ nicht ausgewertet, da INPUT_TYPE größer als 1 ist:

#define INPUT_TYPE 2
#include <stdio.h>

void f( int n )
{
   // side effect: n not incremented
   if( n++ || INPUT_TYPE ) //warning 6236 issued
   {
      puts( "Always gets here" );
   }
   else
   {
      puts( "Never enters here" );
   }
}

Im folgenden Code wird der bitweise AND-Operator (&) verwendet, um die Warnung zu korrigieren:

#define INPUT_TYPE 2
#include <stdio.h>

void f( int n )
{
   if( n++ & INPUT_TYPE )
   {
      puts( "Bitwise-AND comparison is true" );
   }
   else
   {
      puts( "Bitwise-AND comparison is false" );
   }
}

Siehe auch

Referenz

Operator & (C#-Referenz)