我的应用程序中有代码,如下所示。我收到了一些关于错误的反馈,当我惊恐时,我将一个调试器放在它上面,发现-5和0之间的MAX是-5!目标C中的MAX/MIN函数避免了投射问题
NSString *test = @"short";
int calFailed = MAX(test.length - 10, 0); // returns -5
查看MAX宏后,我看到它需要两个参数是相同的类型。在我的情况下,“test.length”是一个无符号整数,0是一个有符号整数。所以简单的强制转换(对于任一参数)可以解决这个问题。
NSString *test = @"short";
int calExpected = MAX((int)test.length - 10, 0); // returns 0
这看起来像是这个宏的令人讨厌和意想不到的副作用。有没有另一个内置的方法来执行MIN/MAX的iOS编译器会警告不匹配的类型?看起来像这样应该是一个编译时问题,并不需要调试器弄清楚。我可以随时写我自己的,但想看看是否有其他人有类似的问题。
你的意思是像'fmax'? – 2013-04-29 02:53:56
谢谢。它帮助了我。 – Raja 2017-05-22 11:51:13