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

Operador &