Annen

Mac-advarsel: foreslå parenteser rundt oppgave som brukes som sannhetsverdi

R

rublesaha

Original plakat
22. desember 2008
  • 8. januar 2009
Hei
Jeg bruker denne kodebiten

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 advarselen:
'foreslå parenteser rundt oppgave brukt som sannhetsverdi' for den første linjen, dvs. for 'for'-løkken....kan noen hjelpe meg med å bli kvitt denne advarselen.. TIL

kpua

25. juli 2006


  • 8. januar 2009
For det første er det generelt dårlig form å ha bivirkninger i if()-setninger.

Noen ganger er det imidlertid den enkleste måten å kode det du mener (selv om jeg ikke nødvendigvis tror det er i eksemplet ditt). Når du har en oppgave i en if-setning, forventer GCC vanligvis noe slikt:

Kode: |_+_|
Legg merke til de ekstra parentesene rundt oppgaven. GCC foreslår at du bruker parentesene for å unngå følgende feil:

Kode: |_+_|
som ikke vil sjekke om verdien tilordnet foo er lik NULL, men heller tilordne boolsk (bar() != NULL) til foo.

Det er også vanlig og generelt mer tydelig å ha den eksplisitte boolske sjekken der, så det er derfor GCC forventer dette. S

Sander

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

Kode: |_+_|
er riktig C (tilordne b til a og sjekk for ikke-null), men oftest mente folk virkelig

Kode: |_+_|
Siden tildeling i if() er unntaket, utsteder GCC en advarsel om det. Også for fremtidige lesere av koden din, indikerer de ekstra parentesene 'ja, jeg mener virkelig oppdrag her'.