C6239

Actualización: noviembre 2007

C6239

Advertencia C6239: (<constante distinta de cero> && <expresión>) siempre evalúa el resultado de <expresión>. ¿Deseaba utilizar el operador de bit a bit AND?

Esta advertencia indica que un valor constante distinto de cero que no es uno se ha detectado en el lado izquierdo de una operación AND lógica que tiene lugar en un contexto de prueba. Por ejemplo, la expresión ( 2 && n ) se reduce a (!!n), que es el valor booleano de n.

Esta advertencia suele indicar un intento de comprobación de una máscara de bits en la que se debe utilizar el operador AND bit a bit (&). No se genera si la constante distinta de cero se evalúa como 1, debido a su uso para la elección selectiva de rutas de acceso del código.

Ejemplo

El código siguiente genera esta advertencia:

#include <stdio.h>
#define INPUT_TYPE 2
void f( int n )
{
   if(INPUT_TYPE && n) // warning 6239
   {
      puts("boolean value of n is true");
   }
   else
   {
      puts("boolean value of n is false");
   }
}

Para corregir esta advertencia, utilice 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");
   }
}

Vea también

Referencia

Operador & (Referencia de C#)