【发布时间】:2013-05-23 22:38:06
【问题描述】:
谁能向我解释 Xcode/Objective C 的这些结果?当然,没有任何情况下 -2 应该测试大于 31。
(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 只是一个 int。
编辑添加:这是失败的代码(删掉了一些不相关的行):
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。
【问题讨论】:
-
可能是一些奇怪的二进制文件。
-
出于某种原因,事物正在转换为无符号类型。在快速浏览文档时,我不明白为什么。我猜这是一个错误。我在这里得到了相同的结果,但它在 GDB 中运行良好;你能用那个代替吗?
-
不只是在调试器中——我编译的代码也出现了同样的错误。
-
您可以发布您的实际代码以及您拥有的任何日志结果吗?
-
请出示您的代码!
标签: objective-c lldb comparison-operators