objective-c – Objective C MAX宏错误

前端之家收集整理的这篇文章主要介绍了objective-c – Objective C MAX宏错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在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没有副作用,所以通常的宏问题不应该适用.任何想法发生了什么?

解决方法

[array count]返回一个NSUInteger – 换句话说,返回一个无符号整数.所以[array count] – 1不是-1,它是((NSUInteger)-1),这是0xFFFFFFFF或类似的 – 大于零.

但是,当您将0xFFFFFFFF作为参数传递给NSLog(@“%d”)时,NSLog将其视为有符号整数(因为您使用%d).

原文链接:https://www.f2er.com/c/112733.html

猜你在找的C&C++相关文章