Övrig

Mac-varning: föreslå parenteser runt uppgiften som används som sanningsvärde

R

rublesaha

Originalaffisch
22 december 2008
  • 8 januari 2009
Hej
Jag använder det här kodavsnittet

void * handtag_;

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 jag får varningen:
'föreslå parenteser runt tilldelningen som används som sanningsvärde' för den första raden, dvs för 'för'-slingan....kan någon hjälpa mig att bli av med denna varning.. TILL

kpua

25 juli 2006


  • 8 januari 2009
För det första är det i allmänhet dålig form att ha biverkningar i if()-satser.

Men ibland är det det enklaste sättet att koda vad du menar (även om jag inte nödvändigtvis tror att det är i ditt exempel). När du har en uppgift i ett if-uttalande förväntar sig GCC i allmänhet något i stil med detta:

Kod: |_+_|
Lägg märke till de extra parenteserna runt uppgiften. GCC föreslår att du använder parenteserna för att undvika följande fel:

Kod: |_+_|
som inte skulle kontrollera att värdet som tilldelats foo är lika med NULL, utan snarare tilldelar boolean (bar() != NULL) till foo.

Det är också vanligt och generellt sett mer tydligt att ha den explicita booleska kontrollen där, så det är därför GCC förväntar sig detta. S

Sander

till
24 april 2008
  • 9 januari 2009
Det beror också på att uttalandet

Kod: |_+_|
är korrekt C (tilldela b till a och kontrollera om det inte är noll), men oftast menade folk verkligen

Kod: |_+_|
Eftersom tilldelning i if() är undantaget utfärdar GCC en varning om det. Även för framtida läsare av din kod indikerar de extra parenteserna 'ja, jag menar verkligen uppdrag här'.