אַחֵר

אזהרת Mac: הצע סוגריים סביב ההקצאה המשמשת כערך אמת

ר

rublesaha

פוסטר מקורי
22 בדצמבר 2008
  • 8 בינואר 2009
היי
אני משתמש בקטע הקוד הזה

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

אבל אני מקבל את האזהרה:
'הצע סוגריים מסביב להקצאה המשמשת כערך אמת' עבור השורה הראשונה, כלומר לולאת 'עבור'... מישהו יכול לעזור לי להיפטר מהאזהרה הזו... ל

קפואה

25 ביולי 2006


  • 8 בינואר 2009
ראשית, זה בדרך כלל צורה גרועה שיש תופעות לוואי בהצהרות if().

עם זאת, לפעמים זו הדרך הפשוטה ביותר לקוד למה אתה מתכוון (אם כי אני לא חושב שזה בהכרח בדוגמה שלך). כאשר יש לך משימה בהצהרת if, GCC מצפה בדרך כלל למשהו כזה:

קוד: |_+_|
שימו לב לסוגריים הנוספים סביב המטלה. GCC מציע לך להשתמש בסוגריים כדי למנוע את השגיאה הבאה:

קוד: |_+_|
מה שלא יבדוק אם הערך שהוקצה ל-foo שווה ל-NULL, אלא יקצה את הערך הבוליאני (bar() != NULL) ל-foo.

זה גם נהוג ובאופן כללי יותר ברור שהצ'ק הבוליאני המפורש שם, אז זו הסיבה ש-GCC מצפה לזה. ס

מַשׁחֵז

ל
24 באפריל, 2008
  • 9 בינואר 2009
זה גם בגלל ההצהרה

קוד: |_+_|
זה נכון C (הקצו את b ל-a ובדוק אם לא אפס), אבל לרוב אנשים באמת התכוונו

קוד: |_+_|
מכיוון שהקצאה בתוך ה-if() היא החריג, GCC מוציאה אזהרה לגביה. גם עבור קוראים עתידיים של הקוד שלך, הסוגריים הנוספים מציינים 'כן, אני באמת מתכוון למשימה כאן'.