Avertissement C6317
Opérateur incorrect : non logique ( !) n’est pas interchangeable avec un complément (~)
Notes
Cet avertissement indique qu’un non logique (!
) est appliqué à une constante susceptible d’être un indicateur de bits. Le résultat de non logique n’est pas booléen ; Il est incorrect d’appliquer l’opérateur au niveau du bit et (&
) à une valeur booléenne. Utilisez l’opérateur ones-complement (~
) pour retourner des indicateurs.
Nom de l’analyse du code : NOTNOTCOMPLEMENT
Exemple
Le code suivant génère cet avertissement :
#define FLAGS 0x4004
void f(int i)
{
if (i & !FLAGS) // warning
{
// code
}
}
Pour corriger cet avertissement, utilisez le code suivant :
#define FLAGS 0x4004
void f(int i)
{
if (i & ~FLAGS)
{
// code
}
}