Advertencia C6317

Operador incorrecto: el no lógico (!) no es intercambiable con ones-complement (~)

Comentarios

Esta advertencia indica que se aplica un valor NOT lógico (!) a una constante que es probable que sea una marca de bits. El resultado de no es booleano; es incorrecto aplicar el operador bit a bit y (&) a un valor booleano. Use el operador complemento a unos (~) para voltear marcas.

Nombre del análisis de código: NOTNOTCOMPLEMENT

Ejemplo

El código siguiente genera esta advertencia:

#define FLAGS   0x4004

void f(int i)
{
  if (i & !FLAGS) // warning
  {
    // code
  }
}

Para corregir esta advertencia, utilice el código siguiente:

#define FLAGS   0x4004

void f(int i)
{
  if (i & ~FLAGS)
  {
    // code
  }
}

Consulte también