Advertencia C6239
('constante no cero' && 'expression') siempre se evalúa como el resultado de 'expression'. ¿Tenía previsto usar el operador AND bit a bit?
Esta advertencia indica que se ha detectado un valor de constante distinta de cero, que no es uno, en el lado izquierdo de una operación AND lógica que se produce en un contexto de prueba. Por ejemplo, la expresión ( 2 && n )
se reduce a (!!n)
, que es el valor booleano de n
.
Comentarios
Esta advertencia suele indicar un intento de comprobar una máscara de bits en la que se debe usar el operador AND bit a bit (&
) y no se genera si la constante que no es cero se evalúa como 1 debido a su uso para elegir selectivamente rutas de acceso de código.
Nombre del análisis de código: NONZEROLOGICALAND
Ejemplo
El código siguiente genera esta advertencia:
#include <stdio.h>
#define INPUT_TYPE 2
void f( int n )
{
if(INPUT_TYPE && n) // warning C6239
{
puts("boolean value of n is true");
}
else
{
puts("boolean value of n is false");
}
}
Para corregir esta advertencia, use el operador AND bit a bit (&
) como se muestra en el código siguiente:
#include <stdio.h>
#define INPUT_TYPE 2
void f( int n )
{
if( ( INPUT_TYPE & n ) )
{
puts("bitmask true");
}
else
{
puts("bitmask false");
}
}
Consulte también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: a lo largo de 2024, eliminaremos gradualmente los problemas de GitHub como mecanismo de comentarios para el contenido y lo reemplazaremos por un nuevo sistema de comentarios. Para obtener más información, consulte:Enviar y ver comentarios de