Altro

Avviso Mac: suggerisci parentesi intorno all'assegnazione utilizzata come valore di verità

R

rublesaha

Manifesto originale
22 dicembre 2008
  • 8 gennaio 2009
Ciao
Sto usando questo frammento di codice

void * handle_;

if (handle_ =dlopen('/System/Library/Frameworks/DiskArbitration.Framework/Versions/A/DiskArbitration',RTLD_NOW))
{
printf('............');

}
else if (handle_ =dlopen('/System/Library/PrivateFrameworks/DiskArbitration.Framework/Versions/A/DiskArbitration',RTLD_NOW))
{
printf('.................');
}

Ma ricevo l'avviso:
'suggerisci parentesi intorno all'assegnazione usata come valore di verità' per la prima riga, ad esempio il ciclo for 'for'... qualcuno può aiutarmi a sbarazzarmi di questo avviso.. A

kpua

25 luglio 2006


  • 8 gennaio 2009
Prima di tutto, è generalmente una cattiva forma avere effetti collaterali nelle istruzioni if().

Tuttavia, a volte è il modo più semplice per codificare ciò che intendi (anche se non penso che sia necessariamente nel tuo esempio). Quando hai un'assegnazione in un'istruzione if, GCC generalmente si aspetta qualcosa del genere:

Codice: |_+_|
Notare le parentesi in più attorno al compito. GCC suggerisce di utilizzare le parentesi per evitare il seguente errore:

Codice: |_+_|
che non verificherebbe che il valore assegnato a foo sia uguale a NULL, ma piuttosto assegnerebbe il booleano (bar() != NULL) a foo.

È anche consuetudine e generalmente più chiaro avere il controllo booleano esplicito lì, ecco perché GCC si aspetta questo. S

Levigatrice

a
24 aprile 2008
  • 9 gennaio 2009
È anche perché la dichiarazione

Codice: |_+_|
è corretto C (assegna b ad a e controlla se è diverso da zero), ma molto spesso le persone intendevano davvero

Codice: |_+_|
Poiché l'assegnazione all'interno di if() è l'eccezione, GCC emette un avviso al riguardo. Anche per i futuri lettori del tuo codice, le parentesi in più indicano 'sì, intendo proprio l'assegnazione qui'.