Jiný

Varování pro Mac: navrhněte závorky kolem přiřazení používaného jako pravdivostní hodnota

R

rublesaha

Původní plakát
22. prosince 2008
  • 8. ledna 2009
Ahoj
Používám tento fragment 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ávám varování:
„navrhnout závorky kolem přiřazení použitého jako pravdivostní hodnota“ pro první řádek, tj. pro smyčku „pro“...může mi někdo pomoci zbavit se tohoto varování. K

kpua

25. července 2006


  • 8. ledna 2009
Za prvé, je obecně špatná forma mít vedlejší účinky v příkazech if().

Někdy je to však nejjednodušší způsob, jak kódovat to, co máte na mysli (i když si nemyslím, že je to nutně ve vašem příkladu). Když máte přiřazení v příkazu if, GCC obecně očekává něco takového:

Kód: |_+_|
Všimněte si dalších závorek kolem úkolu. GCC doporučuje používat závorky, abyste se vyhnuli následující chybě:

Kód: |_+_|
což by nekontrolovalo, zda je hodnota přiřazená k foo rovna NULL, ale spíše přiřazuje boolean (bar() != NULL) k foo.

Je také obvyklé a obecně jasnější mít tam explicitní booleovskou kontrolu, takže to je důvod, proč to GCC očekává. S

Sander

na
24. dubna 2008
  • 9. ledna 2009
Je to také proto, že prohlášení

Kód: |_+_|
je správně C (přiřaďte b k a a zkontrolujte nenulové), ale nejčastěji to lidé mysleli skutečně

Kód: |_+_|
Protože přiřazení uvnitř if() je výjimkou, GCC na to vydá varování. Také pro budoucí čtenáře vašeho kódu, závorky navíc označují 'ano, tady opravdu myslím zadání'.