C6317
Avertissement C6317 : opérateur incorrect : l'opérateur NOT logique (!) n'est pas interchangeable avec l'opérateur de complément à 1 (~)
Cet avertissement indique qu'un opérateur NOT logique (!) est appliqué à une constante qui est probablement un indicateur de bits. Le résultat de l'opérateur NOT logique est Boolean ; il est incorrect d'appliquer une valeur Boolean à l'opérateur de bits AND (&). Utilisez l'opérateur de complément à 1 (~) pour retourner des indicateurs.
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
}
}