Inne

Ostrzeżenie dla komputerów Mac: zasugeruj nawiasy wokół przypisania używanego jako wartość prawdy

r

rublesaha

Oryginalny plakat
22 grudnia 2008
  • 8 stycznia 2009
Cześć
Używam tego fragmentu kodu

nieważne * uchwyt_;

if (handle_ =dlopen('/System/Library/Frameworks/DiskArbitration.Framework/Wersje/A/DiskArbitration',RTLD_NOW))
{
printf('.............');

}
else if (handle_ =dlopen('/System/Library/PrivateFrameworks/DiskArbitration.Framework/Versions/A/DiskArbitration',RTLD_NOW))
{
printf('.................');
}

Ale otrzymuję ostrzeżenie:
„zasugeruj nawiasy wokół przypisania użytego jako wartość prawdy” dla pierwszego wiersza, tj. dla pętli „for”… czy ktoś może mi pomóc pozbyć się tego ostrzeżenia… DO

kpua

25 lipca 2006 r.


  • 8 stycznia 2009
Po pierwsze, generalnie złą formą jest posiadanie efektów ubocznych w instrukcjach if().

Jednak czasami jest to najprostszy sposób na zakodowanie tego, co masz na myśli (chociaż nie sądzę, że jest to koniecznie w twoim przykładzie). Kiedy masz przypisanie w instrukcji if, GCC generalnie oczekuje czegoś takiego:

Kod: |__+_|
Zwróć uwagę na dodatkowe nawiasy wokół zadania. GCC sugeruje użycie nawiasów, aby uniknąć następującego błędu:

Kod: |__+_|
który nie sprawdziłby, czy wartość przypisana do foo jest równa NULL, ale raczej przypisze wartość logiczną (bar() != NULL) do foo.

Jest to również zwyczajowe i ogólnie bardziej jasne, aby mieć tam jawną kontrolę logiczną, więc dlatego GCC tego oczekuje. S

Sander

do
24 kwietnia 2008
  • 9 stycznia 2009
Dzieje się tak również dlatego, że stwierdzenie

Kod: |__+_|
jest poprawne C (przypisz b do a i sprawdź, czy nie ma wartości niezerowej), ale najczęściej ludzie naprawdę mieli na myśli

Kod: |__+_|
Ponieważ przypisanie wewnątrz if() jest wyjątkiem, GCC ostrzega o tym. Również dla przyszłych czytelników twojego kodu, dodatkowe nawiasy wskazują 'tak, naprawdę mam na myśli przypisanie tutaj'.