C6317
aviso C6317: Operador incorreto: não lógico (!) não é intercambiável com complemento (~)
Esse aviso indica que um lógico - não!() é aplicado a uma constante que é provavelmente um sinalizador de bit.O resultado de lógico - não é booleana; está incorreto aplicar bit a bit e o operador de&() com um valor booliano.Use o operador de complemento~(-) para inverter sinalizadores.
Exemplo
O código a seguir gera este aviso:
#define FLAGS 0x4004
void f(int i)
{
if (i & !FLAGS) // warning
{
// code
}
}
Para corrigir esse aviso, use o seguinte código:
#define FLAGS 0x4004
void f(int i)
{
if (i & ~FLAGS)
{
// code
}
}