我不明白MIN(a,b)宏中的这种奇怪行为。救命?

时间:2009-12-28 20:45:29

标签: objective-c

NSArray* arr = [NSArray array];
int a = MIN([arr count], 1);      // 0   correct
int b = MIN(0 - 1, 1);            // -1  correct
int c = MIN([arr count] - 1, 1);  // 1   WRONG        

这是MIN宏的定义,在NSObjCRuntime.h中:

#if !defined(MIN)
#define MIN(A,B)    ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __a : __b; })
#endif

1 个答案:

答案 0 :(得分:8)

NSArray的{​​{1}}方法会返回一个无符号的-count,因此从计数中减去不会产生负值。