Avviso C6290
Operazione bit per bit sul risultato logico: ! ha una precedenza maggiore di &. Usa && o (!( x & y))
Questo avviso indica una possibile confusione nell'uso di un operatore o di una precedenza dell'operatore.
Osservazioni:
L'operatore !
restituisce un risultato booleano e ha una precedenza maggiore rispetto a &
. L'operatore bit per bit e (&) accetta due argomenti aritmetici. Di conseguenza, è stato rilevato uno degli errori seguenti:
L'espressione non è racchiusa tra parentesi:
Poiché il risultato di
!
è booleano (zero o uno), un tentativo di testare che due variabili hanno bit in comune finirà solo per verificare che il bit più basso sia presente sul lato destro:((!8) & 1) == 0
.L'operatore
!
non è corretto e deve essere invece:~
L'operatore
!
ha un risultato booleano, mentre l'operatore~
ha un risultato aritmetico. Questi operatori non sono mai intercambiabili, anche quando si opera su un valore booleano (zero o uno):((!0x01) & 0x10) == 0x0
, mentre((~0x01) & 0x10) == 0x10
.L'operatore
&
binario non è corretto e deve essere&&
:Anche se
&
a volte può essere interscambiato con&&
, non è equivalente perché forza la valutazione del lato destro dell'espressione. Alcuni effetti collaterali in questo tipo di espressione possono essere terminale.
È difficile giudicare la gravità di questo problema senza esaminare il codice. Il codice deve essere controllato per assicurarsi che si verifichi il test previsto.
Nome dell'analisi del codice: LOGICALNOTBITWISEAND
Esempio
Il codice seguente genera questo avviso:
void f(int x, int y)
{
if (!x & y)
{
// code ..
}
}
Per correggere questo avviso, usare il codice di esempio seguente:
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 ...
}
}
L'avviso C6317 viene segnalato se l'operatore !
si trova sul lato destro dell'operatore &
.
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per