Alte

Avertisment Mac: sugerați paranteze în jurul atribuirii utilizate ca valoare de adevăr

R

rublesaha

Poster original
22 decembrie 2008
  • 8 ianuarie 2009
Salut
Folosesc acest fragment de cod

void * mâner_;

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('.................');
}

Dar primesc avertismentul:
„Sugerează paranteze în jurul atribuirii folosite ca valoare de adevăr” pentru prima linie, adică bucla „for”... poate cineva să mă ajute să scap de acest avertisment. LA

kpua

25 iulie 2006


  • 8 ianuarie 2009
În primul rând, este în general proastă să ai efecte secundare în instrucțiunile if().

Cu toate acestea, uneori este cel mai simplu mod de a codifica ceea ce vrei să spui (deși nu cred că este neapărat în exemplul tău). Când aveți o sarcină într-o declarație if, GCC se așteaptă, în general, la ceva de genul acesta:

Cod: |_+_|
Observați parantezele suplimentare din jurul temei. GCC vă sugerează să utilizați parantezele pentru a evita următoarea eroare:

Cod: |_+_|
care nu ar verifica dacă valoarea atribuită lui foo este egală cu NULL, ci mai degrabă atribuie booleanul (bar() != NULL) lui foo.

De asemenea, este obișnuit și, în general, mai clar să existe verificarea booleană explicită acolo, așa că de aceea GCC se așteaptă la asta. S

Sander

la
24 aprilie 2008
  • 9 ianuarie 2009
Este și pentru că declarația

Cod: |_+_|
este corect C (atribuiți b la a și verificați dacă nu este zero), dar cel mai adesea oamenii au vrut să spună cu adevărat

Cod: |_+_|
Deoarece atribuirea în interiorul if() este o excepție, GCC emite un avertisment cu privire la aceasta. De asemenea, pentru viitorii cititori ai codului dvs., parantezele suplimentare indică „da, chiar mă refer la atribuire aici”.