Secondo PC-lint, la seguente dichiarazione non sarà mai TRUE
:Questa istruzione C/C++ if() può mai essere valutata su TRUE?
if((variable & 0x02) == 1)
Sto usando un compilatore C per sistemi embedded che valuta a TRUE
ogni volta che viene impostato il bit corrispondente in variable
. Immagino che il compilatore stia facendo un confronto TRUE
/FALSE
di entrambi i lati dello ==
invece di confrontare i numeri risultanti. In altre parole, ogni volta che l'espressione (varable & 0x02)
non è zero (ad esempio TRUE
), la dichiarazione sarà anche TRUE
, poiché il valore 1 is also TRUE
(non zero).
Non so se gli standard C/C++
definiscono chiaramente come dovrebbe comportarsi un compilatore in questo caso. Esistono esperti C/C++
che possono rispondere a questa domanda sulla base di ciò che dicono gli standard (ad esempio C90, C99,
ecc.)?
P.S .: Nella dichiarazione precedente, "variabile" è un carattere senza segno.
Qual è il 'tipo di variable'? –
Potresti per favore chiamare questo compilatore? Un mio amico crea una collezione di bug di compilatori dispari. – blaze
È possibile che il tuo codice reale abbia una doppia e commerciale (ad esempio "var && 0x02")? Ciò spiegherebbe il compilatore valutandolo come vero. – tinman