Avertissement C6290
Opération au niveau du bit sur le résultat logique : ! a une priorité supérieure à &. Utiliser &&& ou ( !( x &y)) à la place
Cet avertissement indique une confusion possible dans l’utilisation d’un opérateur ou d’une priorité d’opérateur.
Notes
L’opérateur !
génère un résultat booléen et a une priorité plus élevée que le &
. L’opérateur bitwise-and-(&) prend deux arguments arithmétiques. Par conséquent, l’une des erreurs suivantes a été détectée :
L’expression est mal entre parenthèses :
Étant donné que le résultat est
!
booléen (zéro ou un), une tentative de test que deux variables ont des bits en commun finira seulement par tester que le bit le plus bas est présent dans le côté droit :((!8) & 1) == 0
.L’opérateur
!
est incorrect et doit être à~
la place :L’opérateur
!
a un résultat booléen, tandis que l’opérateur~
a un résultat arithmétique. Ces opérateurs ne sont jamais interchangeables, même en cas d’exploitation sur une valeur booléenne (zéro ou un) :((!0x01) & 0x10) == 0x0
alors .((~0x01) & 0x10) == 0x10
L’opérateur
&
binaire est incorrect et doit être à la place&&
:Bien qu’il
&
puisse parfois être échangé avec&&
, il n’est pas équivalent, car il force l’évaluation du côté droit de l’expression. Certains effets secondaires de ce type d’expression peuvent être terminals.
Il est difficile de juger de la gravité de ce problème sans examiner le code. Le code doit être inspecté pour s’assurer que le test prévu se produit.
Nom de l’analyse du code : LOGICALNOTBITWISEAND
Exemple
Le code suivant génère cet avertissement :
void f(int x, int y)
{
if (!x & y)
{
// code ..
}
}
Pour corriger cet avertissement, utilisez l’exemple de code suivant :
void f(int x, int y)
{
/* When testing that x has no bits in common with y. */
if (!(x & y))
{
// code
}
/* When testing for the complement of x in y. */
if ((~x) & y)
{
// code ...
}
}
#include <windows.h>
void fC(int x, BOOL y )
{
/* When y is a Boolean or Boolean result. */
if ((!x) && y)
{
// code ...
}
}
Avertissement C6317 est signalé si l’opérateur !
se trouve sur le côté droit de l’opérateur &
.
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : tout au long de 2024, nous allons éliminer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d'informations, consultez :Envoyer et afficher des commentaires pour