为示例代码的 Objective-C 特性道歉,但我很确定我的问题的答案在 C 标准库和/或 Appleclang
编译器中。
我有NSArray
一个可变数量的项目。我想使用项目计数来创建一个介于 1 和 3 之间的值。我正在使用 CMAX
宏,但它有一些奇怪的行为:
NSLog( @"%d %d %d %d", 1, [tasks count], 3 - [tasks count], MAX( 1, 3 - [tasks count] ) );
增加项目数时,此日志语句的输出tasks
如下:
1 0 3 3
1 1 2 2
1 2 1 1
1 3 0 1
1 4 -1 -1
我深入研究了文档,发现该count
函数正在返回一个NSUInteger
. 我的困境的解决方案只是将返回值类型转换为NSInteger
:
NSLog( @"%d %d %d %d", 1, (NSInteger)[tasks count], 3 - (NSInteger)[tasks count], MAX( 1, 3 - (NSInteger)[tasks count] ) );
1 0 3 3
1 1 2 2
1 2 1 1
1 3 0 1
1 4 -1 1
(如果你不熟悉 Objective-C,在 32 位架构NSInteger
上是 typedef'd to int
and NSUInteger
is unsigned int
。)
我很难理解原始代码中隐含的类型转换,导致我的结果不直观。有人可以照亮吗?