Iné

Varovanie pre Mac: navrhnite zátvorky okolo priradenia používaného ako pravdivostná hodnota

R

rublesaha

Pôvodný plagát
22. decembra 2008
  • 8. januára 2009
Ahoj
Používam tento úryvok kódu

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

Ale dostávam varovanie:
„navrhnúť zátvorky okolo priradenia použitého ako pravdivostná hodnota“ pre prvý riadok, tj pre cyklus „pre“...môže mi niekto pomôcť zbaviť sa tohto varovania. K

kpua

25. júla 2006


  • 8. januára 2009
Po prvé, vo všeobecnosti je zlá forma mať vedľajšie účinky v príkazoch if().

Niekedy je to však najjednoduchší spôsob, ako kódovať to, čo máte na mysli (hoci si nemyslím, že je to nevyhnutne vo vašom príklade). Keď máte priradenie v príkaze if, GCC vo všeobecnosti očakáva niečo také:

Kód: |_+_|
Všimnite si extra zátvorky okolo úlohy. GCC odporúča použiť zátvorky, aby ste sa vyhli nasledujúcej chybe:

Kód: |_+_|
čo by nekontrolovalo, či sa hodnota priradená k foo rovná NULL, ale skôr priraďuje booleovskú hodnotu (bar() != NULL) k foo.

Je tiež obvyklé a vo všeobecnosti jasnejšie mať tam explicitnú booleovskú kontrolu, takže to je dôvod, prečo to GCC očakáva. S

Sander

do
24. apríla 2008
  • 9. januára 2009
Je to aj preto, že vyhlásenie

Kód: |_+_|
je správne C (priraďte b k a a skontrolujte nenulové), ale najčastejšie to ľudia mysleli naozaj

Kód: |_+_|
Keďže priradenie vnútri if() je výnimkou, GCC na to vydá varovanie. Aj pre budúcich čitateľov vášho kódu, zátvorky navyše označujú „áno, tu naozaj myslím úlohu“.