Advertencia C6237
('cero' && 'expresión') siempre es cero. 'expression' nunca se evalúa y puede tener efectos secundarios
Esta advertencia indica que se detectó un valor constante de cero en el lado izquierdo de una operación lógica y que se produce en un contexto de prueba. La expresión resultante siempre se evalúa como false. Por lo tanto, no se evalúa el lado derecho de la operación logical-AND. Esta característica de lenguaje se conoce como "evaluación de cortocircuito".
Comentarios
Debe examinar cuidadosamente el lado derecho de la expresión: asegúrese de que los efectos secundarios, como las operaciones de asignación, llamada a función, incremento y decremento necesarias para una funcionalidad adecuada no se ven afectadas por la evaluación de cortocircuito.
La expresión (0 && n
) no produce ningún efecto secundario y se usa normalmente para elegir de forma selectiva rutas de acceso al código.
Nombre del análisis de código: ZEROLOGICALANDLOSINGSIDEEFFECTS
Ejemplo
En el código siguiente se muestran varios ejemplos de código que generan esta advertencia:
#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 corregir esta advertencia, utilice el código siguiente:
#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");
}
}
Consulte también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de