Advertencia C6236
('expression' || 'constante no cero') siempre es una constante que no es cero.
Esta advertencia indica que se detectó un valor de constante distinto de cero, que no es uno, en el lado derecho de una operación OR lógica que se produce en un contexto de prueba. Lógicamente, implica que la prueba es redundante y se puede quitar de forma segura. Como alternativa, sugiere que el programador puede haber tenido la intención de usar un operador diferente, por ejemplo, la igualdad (==
), el operador AND bit a bit (&
) o el operador XOR bit a bit (^
), para probar un valor o una marca específicos.
Comentarios
Esta advertencia no se genera para el lenguaje común cuando la constante que no es cero es 1, debido a su uso para habilitar selectivamente rutas de acceso de código en tiempo de compilación. Sin embargo, la advertencia se genera si la constante distinta de cero está formada por una expresión que se evalúa como 1, por ejemplo, 1 + 0.
Nombre del análisis de código: LOGICALORNONZERO
Ejemplo
Este código muestra cómo puede aparecer la advertencia C6236. Dado INPUT_TYPE
que no es 0, la expresión n || INPUT_TYPE
siempre no es cero y la else
cláusula nunca se ejecuta. Sin embargo, INPUT_TYPE
es una constante con un valor distinto de uno, lo que sugiere que está pensado como un valor para la comparación:
#define INPUT_TYPE 2
#include <stdio.h>
void f( int n )
{
if ( n || INPUT_TYPE ) // analysis warning C6236
{
puts( "Always gets here" );
}
else
{
puts( "Never enters here" );
}
}
En su lugar, el código siguiente usa un operador AND bit a bit (&
) para probar si se establece el bit INPUT_TYPE
del parámetro de entrada n
:
#define INPUT_TYPE 2
#include <stdio.h>
void f( int n )
{
if ( n & INPUT_TYPE ) // no warning
{
puts( "Bitwise-AND comparison is true" );
}
else
{
puts( "Bitwise-AND comparison is false" );
}
}
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