加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – Objective C MAX宏错误

发布时间:2020-12-16 03:00:26 所属栏目:百科 来源:网络整理
导读:我在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) =
我在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).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读