Başka

Mac Uyarısı: doğruluk değeri olarak kullanılan atamanın etrafında parantez önerin

r

rublesaha

Orijinal afiş
22 Aralık 2008
  • 8 Ocak 2009
Selam
Bu kod parçasını kullanıyorum

geçersiz * tutamak_;

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

Ama şu uyarıyı alıyorum:
İlk satır için 'doğruluk değeri olarak kullanılan atama etrafında parantez öner', i, 'for' döngüsü için .... biri bu uyarıdan kurtulmama yardım edebilir mi .. İLE

kpua

25 Tem 2006


  • 8 Ocak 2009
Öncelikle, if() ifadelerinde yan etkilere sahip olmak genellikle kötü bir biçimdir.

Bununla birlikte, bazen ne demek istediğinizi kodlamanın en basit yolu budur (gerçi sizin örneğinizde mutlaka olduğunu düşünmüyorum). Bir if ifadesinde bir atamanız olduğunda, GCC genellikle şöyle bir şey bekler:

Kod: |_+_|
Ödevin etrafındaki fazladan parantezlere dikkat edin. GCC, aşağıdaki hatayı önlemek için parantez kullanmanızı önerir:

Kod: |_+_|
bu, foo'ya atanan değerin NULL'a eşit olup olmadığını kontrol etmez, bunun yerine boole değerini (bar() != NULL) foo'ya atar.

Ayrıca, açık boole kontrolünün orada olması gelenekseldir ve genellikle daha açıktır, bu yüzden GCC'nin bunu beklemesinin nedeni budur. S

zımpara

ile
24 Nis 2008
  • 9 Ocak 2009
Ayrıca açıklamanın nedeni

Kod: |_+_|
doğru C'dir (b'yi a'ya atayın ve sıfırdan farklı olup olmadığını kontrol edin), ancak çoğu zaman insanlar gerçekten

Kod: |_+_|
if() içindeki atama istisna olduğundan, GCC bu konuda bir uyarı verir. Ayrıca kodunuzun gelecekteki okuyucuları için ekstra parantezler 'evet, gerçekten burada atamayı kastediyorum' anlamına gelir.