C6237
Aviso C6237: (<zero> && <expressão>) é sempre zero. <expressão> nunca é avaliada e pode ter efeitos colaterais
Esse aviso indicar que um valor constante de zero esteve detectado no lado esquerdo da realização de e de operação que ocorre em um contexto de teste.A expressão resultante é avaliada sempre como false.Em virtude disso, o lado direito da operação AND lógico não foi avaliado.Isso é conhecido como “procurar um caminho mais curto a avaliação.”
Você deve examinar o lado direito da expressão com cuidado para assegurar que nenhum efeito colateral, como a atribuição a chamada de função, o incremento, e as operações de redução necessárias para a funcionalidade adequada não sejam afetados pela avaliação procurar um caminho mais curto.
A expressão (0 && n) não gerencia nenhum efeito colateral e é usado para escolher seletivamente caminhos de código.
O código a seguir mostra as mais exemplos de código que gerencia esse aviso:
#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);
}
}
Para corrigir esse aviso, use o seguinte código:
#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");
}
}