我在Objective C中看到MAX宏的奇怪行为.具体来说,我的主要功能有这个代码:
- NSArray* array = [NSArray array];
- NSLog(@"[array count] - 1 = %d",[array count] - 1);
- NSLog(@"MAX(0,[array count] - 1) = %d",MAX(0,[array count] - 1));
- NSLog(@"MAX(0,-1) = %d",-1));
输出为:
- [array count] - 1 = -1
- MAX(0,[array count] - 1) = -1
- MAX(0,-1) = 0
我用-save-temps保存了预处理器输出,它看起来像这样:
- NSArray* array = [NSArray array];
- NSLog(@"[array count] - 1 = %d",((0) > ([array count] - 1) ? (0) : ([array count] - 1)));
- NSLog(@"MAX(0,((0) > (-1) ? (0) : (-1)));
所有必需的括号都在那里,[array count] – 1没有副作用,所以通常的宏问题不应该适用.任何想法发生了什么?
@H_301_14@