Kita

„Mac“ įspėjimas: pasiūlykite skliaustus aplink priskyrimą, naudojamą kaip tiesos reikšmę

R

rublisaha

Originalus plakatas
2008 m. gruodžio 22 d
  • 2009 m. sausio 8 d
Sveiki
Aš naudoju šį kodo fragmentą

void * rankena_;

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

Bet aš gaunu įspėjimą:
„Pasiūlykite skliaustus aplink priskyrimą, naudojamą kaip tiesos reikšmę“ pirmajai eilutei, ty „for“ kilpai.... ar kas nors gali man padėti atsikratyti šio įspėjimo. KAM

kpua

2006 m. liepos 25 d


  • 2009 m. sausio 8 d
Visų pirma, paprastai bloga forma turėti šalutinį poveikį if() teiginiuose.

Tačiau kartais tai yra paprasčiausias būdas užkoduoti tai, ką turite omenyje (nors nemanau, kad jūsų pavyzdyje tai būtinai). Kai „if“ teiginyje turite užduotį, GCC paprastai tikisi kažko panašaus:

Kodas: |_+_|
Atkreipkite dėmesį į papildomus skliaustus aplink užduotį. GCC siūlo naudoti skliaustus, kad išvengtumėte šios klaidos:

Kodas: |_+_|
kuris netikrintų, ar foo priskirta reikšmė yra lygi NULL, o priskirtų loginį reikšmę (bar() != NULL) foo.

Taip pat įprasta ir paprastai yra aiškiau, kad ten yra aiškus loginis patikrinimas, todėl GCC to tikisi. S

Sanderis

į
2008 m. balandžio 24 d
  • 2009 m. sausio 9 d
Taip pat yra todėl, kad pareiškimas

Kodas: |_+_|
yra teisingas C (priskirkite b prie a ir patikrinkite, ar jis nėra nulis), bet dažniausiai žmonės tikrai turėjo omenyje

Kodas: |_+_|
Kadangi priskyrimas if() yra išimtis, GCC įspėja apie tai. Taip pat būsimiems jūsų kodo skaitytojams papildomi skliaustai nurodo „taip, aš čia tikrai turiu omenyje paskyrimą“.