Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il confronto esplicito di un campo di bit con un tipo booleano genererà risultati imprevisti
Osservazioni:
Questo avviso indica un presupposto non corretto che i campi booleani e bit siano equivalenti. L'assegnazione di 1 a campi di bit inserisce 1 nel singolo bit; Tuttavia, qualsiasi confronto tra questo campo di bit e 1 include un cast implicito del campo di bit a un oggetto signed int. Questo cast convertirà l'oggetto archiviato 1 in -1 e il confronto può produrre risultati imprevisti.
Nome dell'analisi del codice: BITFIELD_TO_BOOL_COMPARISON
Esempio
Il codice seguente genera questo avviso:
struct myBits
{
short flag : 1;
short done : 1;
//other members
} bitType;
void f( )
{
if (bitType.flag == 1)
{
// code...
}
}
Per correggere questo avviso, usare un campo di bit come illustrato nel codice seguente:
void f ()
{
if(bitType.flag==bitType.done)
{
// code...
}
}