【发布时间】:2011-04-16 13:17:55
【问题描述】:
我在 Objective C 中看到 MAX 宏的奇怪行为。具体来说,我的 main 函数中有这段代码:
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", MAX(0, -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", [array count] - 1);
NSLog(@"MAX(0, [array count] - 1) = %d", ((0) > ([array count] - 1) ? (0) : ([array count] - 1)));
NSLog(@"MAX(0, -1) = %d", ((0) > (-1) ? (0) : (-1)));
所有必要的括号都在那里,[array count] - 1 没有副作用,所以通常的宏问题不应该适用。知道发生了什么吗?
【问题讨论】:
标签: objective-c macros