Andet

Mac Advarsel: Foreslå parenteser omkring opgave, der bruges som sandhedsværdi

R

rublesaha

Original plakat
22. december 2008
  • 8. januar 2009
Hej
Jeg bruger dette kodestykke

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

Men jeg får advarslen:
'foreslå parenteser omkring opgave brugt som sandhedsværdi' for den første linje, dvs. for 'for'-løkken....kan nogen hjælpe mig med at slippe af med denne advarsel.. TIL

kpua

25. juli 2006


  • 8. januar 2009
For det første er det generelt dårligt at have bivirkninger i if()-udsagn.

Men nogle gange er det den enkleste måde at kode, hvad du mener (selvom jeg ikke tror, ​​det nødvendigvis er i dit eksempel). Når du har en opgave i en if-erklæring, forventer GCC generelt noget som dette:

Kode: |_+_|
Læg mærke til de ekstra parenteser omkring opgaven. GCC foreslår, at du bruger parenteserne for at undgå følgende fejl:

Kode: |_+_|
som ikke vil kontrollere for værdien tildelt foo er lig med NULL, men snarere tildele boolean (bar() != NULL) til foo.

Det er også sædvanligt og generelt mere klart at have det eksplicitte booleske tjek derind, så det er derfor, GCC forventer dette. S

Sander

til
24. april 2008
  • 9. januar 2009
Det er også fordi udsagnet

Kode: |_+_|
er korrekt C (tildel b til a og tjek for ikke-nul), men oftest mente folk virkelig

Kode: |_+_|
Da tildeling inde i if() er undtagelsen, udsender GCC en advarsel om det. Også for fremtidige læsere af din kode angiver de ekstra parenteser 'ja, jeg mener virkelig opgave her'.