Друго

Предупреждение за Mac: предлагайте скоби около заданието, използвано като истинска стойност

Р

rublesaha

Оригинален плакат
22 декември 2008 г
  • 8 януари 2009 г
здравей
Използвам този фрагмент от код

празно * дръжка_;

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

}
иначе ако (handle_ =dlopen('/System/Library/PrivateFrameworks/DiskArbitration.Framework/Versions/A/DiskArbitration',RTLD_NOW))
{
printf('.................');
}

Но получавам предупреждението:
„предложете скоби около присвояването, използвано като стойност на истината“ за първия ред, т.е. за цикъла „for“... може ли някой да ми помогне да се отърва от това предупреждение.. ДА СЕ

kpua

25 юли 2006 г


  • 8 януари 2009 г
Първо, обикновено е лоша форма да има странични ефекти в if() оператори.

Въпреки това, понякога това е най-простият начин да кодирате това, което имате предвид (въпреки че не мисля, че е задължително във вашия пример). Когато имате задание в оператор if, GCC обикновено очаква нещо подобно:

Код: |_+_|
Обърнете внимание на допълнителните скоби около заданието. GCC ви предлага да използвате скоби, за да избегнете следната грешка:

Код: |_+_|
което няма да проверява дали стойността, присвоена на foo, е равна на NULL, а по-скоро присвоява булевата (bar() != NULL) на foo.

Също така е обичайно и като цяло по-ясно да има изрична булева проверка там, така че ето защо GCC очаква това. С

Сандър

да се
24 април 2008 г
  • 9 януари 2009 г
Това е и защото изявлението

Код: |_+_|
е правилно C (присвойте b на a и проверете за ненула), но най-често хората наистина имаха предвид

Код: |_+_|
Тъй като присвояването вътре в if() е изключение, GCC издава предупреждение за това. Също така за бъдещи читатели на вашия код, допълнителните скоби показват „да, тук наистина имам предвид задание“.