首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Objective C整数比较错误

Objective C整数比较错误
EN

Stack Overflow用户
提问于 2013-05-24 06:38:07
回答 1查看 546关注 0票数 1

有人能向我解释一下Xcode/Objective C的这些结果吗?当然,不会出现-2测试大于31的情况。

代码语言:javascript
复制
(lldb) p dayOfMonth
(int) $37 = -2
(lldb) p (dayOfMonth > 31)
(bool) $38 = true
(lldb) p (dayOfMonth > (int)31)
(bool) $39 = true 
(lldb) p (dayOfMonth > (float)31) 
(bool) $40 = false

我从来没有见过像这样的直截了当的错误答案,也无法想象它怎么会被误解。正如调试器所说,dayOfMonth只是一个整数。

编辑以添加:以下是失败的代码(去掉了一些不相关的行):

代码语言:javascript
复制
    NSRange monthdays = [self.calendar rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:self.displayedDate];
    int dayOfMonth = i+1-shift;  // negative days are at end of prev month; days higher than length of month are in next
    if (dayOfMonth < 1) cellView.dayLabel = prevMonthDays.length + dayOfMonth;
    if (dayOfMonth > monthdays.length) cellView.dayLabel = dayOfMonth - monthdays.length;

当dayOfMonth为负值时,第二个if的值为true。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-25 04:39:47

已确认-这是lldb IR解释器中的错误。

这里有一个修复它的补丁的链接:http://lists.cs.uiuc.edu/pipermail/lldb-commits/Week-of-Mon-20130520/008569.html

注意,新的测试用例正是您的问题所在:

代码语言:javascript
复制
+        self.expect("expression (int)-2",
+            startstr = "(int) $4 = -2")
+
+        self.expect("expression $4 > (int)31",
+            startstr = "(bool) $5 = false")

所以,这应该会让你的工作在未来继续下去!

就你的代码而言,你确实有一个bug。这种情况:

代码语言:javascript
复制
if (dayOfMonth > monthdays.length)

不是在做你想让它做的事。dayOfMonth已签名,而monthdays.length未签名。这意味着dayOfMonth被提升为无符号类型,并且比较变得不好。你需要一个石膏来清理东西:

代码语言:javascript
复制
if (dayOfMonth > (NSInteger)monthdays.length)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16725029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档