C6299

Actualización: noviembre 2007

C6299

Advertencia C6299: Si compara explícitamente un campo de bits con un tipo booleano tendrá resultados inesperados

Esta advertencia indica que se ha supuesto incorrectamente que los tipos booleanos y los campos de bits son equivalentes. Cuando se asigna 1 a un campo de bits, se coloca 1 en su único bit; sin embargo, cualquier comparación de este campo de bit con 1 incluye una conversión implícita del campo de bit en un entero con signo. Esta conversión de tipos convierte el 1 almacenado en -1, por lo que la comparación puede producir resultados inesperados.

Ejemplo

El código siguiente genera esta advertencia:

struct myBits
{
  short flag : 1;
  short done : 1;
  //other members
} bitType;

void f( )
{
  if (bitType.flag == 1) 
  {
  // code...
  }
}

Para corregir esta advertencia, utilice un campo de bit como se muestra en el código siguiente:

void f ()
{
  if(bitType.flag==bitType.done)
  {
    // code...
  }
}