C6240
Avertissement C6240 : (<expression> && <constante non nulle>) correspond toujours au résultat de <expression>. Souhaitiez-vous utiliser l'opérateur de bits AND ?
Cet avertissement indique qu'une valeur de constante non nulle, autre que 1, a été détectée sur le côté droit d'une opération logique AND qui se produit dans un contexte de test. Par exemple, l'expression (n && 3) se réduit à (!!n), qui est la valeur booléenne de n.
Cet avertissement indique généralement une tentative de vérification d'un masque de bits dans lequel l'opérateur de bits AND (&) doit être utilisé. Il n'est pas généré si la constante non nulle est égale à 1 car il est utilisé pour choisir de manière sélective des chemins d'accès de code.
Exemple
Le code suivant génère cet avertissement :
#include <stdio.h>
#define INPUT_TYPE 2
void f(int n)
{
if (n && INPUT_TYPE)
{
puts("boolean value of !!n is true");
}
else
{
puts("boolean value of !!n is false");
}
}
Pour corriger cet avertissement, utilisez l'opérateur de bits AND, comme indiqué dans le code suivant :
#include <stdio.h>
#define INPUT_TYPE 2
void f(int n)
{
if ( (n & INPUT_TYPE) )
{
puts("bitmask true");
}
else
{
puts("bitmak false");
}
}