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 C6237: (<Null> && <Ausdruck>) ist immer 0 (null).<Ausdruck> wird niemals ausgewertet und hat möglicherweise Nebeneffekte.
Diese Warnung gibt an, dass in einem Testkontext auf der linken Seite einer logischen AND-Operation ein Konstantenwert gleich 0 (null) ermittelt wurde.Der daraus resultierende Ausdruck ergibt immer false.Daher wird die rechte Seite der logischen AND-Operation nicht ausgewertet.Dies wird als "Kurzschlussauswertung" bezeichnet.
Untersuchen Sie die rechte Seite des Ausdrucks sorgfältig, um sicherzustellen, dass die für eine ordnungsgemäße Funktionalität erforderlichen Nebeneffekte wie Zuordnungs-, Funktionsaufruf-, Inkrement- und Dekrementoperationen von dieser Kurzschlussauswertung nicht betroffen sind.
Der Ausdruck (0 && n) erzeugt keine Nebeneffekte und wird i. d. R. für die selektive Auswahl von Codepfaden verwendet.
Beispiel
Im folgenden Code werden verschiedene Codebeispiele veranschaulicht, in denen diese Warnung generiert werden:
#include <stdio.h>
#define INPUT_TYPE 0
int test();
// side effect: n not incremented
void f1( int n )
{
if(INPUT_TYPE && n++) //warning: 6237
{
puts("code path disabled");
}
else
{
printf_s("%d - n was not incremented",n);
}
}
// side effect: test() not called
void f2( )
{
if(INPUT_TYPE && test()) //warning: 6237
{
puts("code path disabled");
}
else
{
puts("test() was not called");
}
}
//side effect: assignment and function call did not occur
void f3( int n )
{
if(INPUT_TYPE && ( n=test() )) //warning: 6237
{
puts("code path disabled");
}
else
{
printf_s("%d -- n unchanged. test() was not called", n);
}
}
So korrigieren Sie die Warnung unter Verwendung des folgenden Codes
#include <stdio.h>
#define INPUT_TYPE 0
int test();
void f1( int n )
{
if(INPUT_TYPE)
{
if(n++)
{
puts("code path disabled");
}
}
else
{
puts("n was not incremented");
}
}
void f2( )
{
if(INPUT_TYPE)
{
if( test() )
{
puts("code path disabled");
}
}
else
{
puts("test() was not called");
}
}
void f3( int n )
{
if(INPUT_TYPE)
{
n = test();
if( n )
{
puts("code path disabled");
}
}
else
{
puts("test() was not called");
}
}