C6237
Ostrzeżenie C6237: (<zero> & & <expression>) zawsze wynosi zero.<expression> nigdy nie jest oceniany i może mieć skutki uboczne
To ostrzeżenie wskazuje, że na lewej stronie logicznych wykryto stała wartość zero- i operacji, która występuje w kontekście badania.Wyrażenie będące wynikiem zawsze ma wartość FAŁSZ.W związku z tym, z prawej strony logicznej- I operacja nie jest sprawdzane.To jest określone jako "zwarcie oceny".
Należy zbadać z prawej strony wyrażenia uważnie, aby zapewnić przyrost wartości wszelkich skutków ubocznych, takich jak przypisania, wywołania funkcji i osłabienie czynności niezbędne dla prawidłowego działania nie są zagrożone zwarcie oceny.
Wyrażenie (0 && n) daje żadnych efektów ubocznych i jest powszechnie stosowany do selektywnego wybierz ścieżki kodu.
Przykład
Poniższy kod ilustruje różne przykłady kodu, które generują ostrzeżenie to:
#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);
}
}
Aby poprawić to ostrzeżenie, należy użyć następującego kodu:
#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");
}
}