Sonstiges

Mac-Warnung: schlagen Sie Klammern um die Zuweisung vor, die als Wahrheitswert verwendet wird

R

rublesaha

Originalplakat
22. Dezember 2008
  • 8. Januar 2009
Hi
Ich verwende dieses Code-Snippet

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

Aber ich bekomme die Warnung:
'Klammern um die als Wahrheitswert verwendete Zuweisung vorschlagen' für die erste Zeile, dh die for-Schleife....kann mir jemand helfen, diese Warnung loszuwerden.. ZU

kpua

25. Juli 2006


  • 8. Januar 2009
Zunächst einmal ist es im Allgemeinen eine schlechte Form, Nebeneffekte in if()-Anweisungen zu haben.

Manchmal ist es jedoch der einfachste Weg, das zu codieren, was Sie meinen (obwohl dies in Ihrem Beispiel nicht unbedingt der Fall ist). Wenn Sie eine Zuweisung in einer if-Anweisung haben, erwartet GCC im Allgemeinen Folgendes:

Code: |_+_|
Beachten Sie die zusätzlichen Klammern um die Aufgabe. GCC empfiehlt, die Klammern zu verwenden, um den folgenden Fehler zu vermeiden:

Code: |_+_|
die nicht prüfen würde, ob der foo zugewiesene Wert gleich NULL ist, sondern stattdessen den booleschen Wert (bar() != NULL) an foo zuweisen würde.

Es ist auch üblich und im Allgemeinen klarer, den expliziten booleschen Check dort zu haben, daher erwartet GCC dies. S

Sander

zu
24. April 2008
  • 9. Januar 2009
Es liegt auch daran, dass die Aussage

Code: |_+_|
ist richtig C (weist b a zu und prüft auf Nicht-Null), aber meistens meinten die Leute wirklich

Code: |_+_|
Da die Zuweisung innerhalb von if() die Ausnahme ist, gibt GCC eine Warnung aus. Auch für zukünftige Leser Ihres Codes bedeuten die zusätzlichen Klammern 'ja, ich meine hier wirklich die Zuordnung'.