小编rai*_*r33的帖子

Objective C中的MAX/MIN功能可避免出现铸造问题

我的应用程序中的代码如下所示.我得到了一些关于bug的反馈,当我恐惧时,我在其上放了一个调试器,发现-5到0之间的MAX是-5!

NSString *test = @"short";
int calFailed = MAX(test.length - 10, 0);                      // returns -5
Run Code Online (Sandbox Code Playgroud)

在查看MAX宏之后,我发现它需要两个参数属于同一类型.在我的例子中,"test.length"是unsigned int,0是signed int.因此,简单的强制转换(用于任一参数)可以解决问题.

NSString *test = @"short";
int calExpected = MAX((int)test.length - 10, 0);                    // returns 0
Run Code Online (Sandbox Code Playgroud)

这似乎是这个宏的一个令人讨厌和意想不到的副作用.是否有另一种内置的iOS方法来执行MIN/MAX,编译器会警告不匹配的类型?看起来像这样应该是一个编译时问题,而不是需要调试器弄清楚的东西.我总是可以写自己的,但想知道是否有其他人有类似的问题.

objective-c ios

20
推荐指数
2
解决办法
2万
查看次数

标签 统计

ios ×1

objective-c ×1