Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Warnung C6236: (<Ausdruck> || <Konstante ungleich 0>) 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 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 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 Operator AND (&)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" );
}
}