NSInteger myInt = 1804809223;
NSLog(@"%i", myInt); <====
上面的代码产生错误:
Values of type 'NSInteger' should not be used as format arguments; add an explicit cast to 'long' instead
更正后的 NSLog
消息实际上是 NSLog(@"%lg", (long) myInt);
。如果我想显示值,为什么我必须将 myInt
的整数值转换为 long
?
最佳答案
如果您在 OS X(64 位)上编译,您会收到此警告,因为在该平台上,NSInteger
被定义为 long
,并且是一个 64 位整数。另一方面,%i
格式适用于 32 位的 int
。所以格式和实际参数大小不匹配。
由于NSInteger
是32位还是64位,根据平台不同,编译器推荐
给 long
添加一个强制转换。
更新: 由于 iOS 7 现在也支持 64 位,因此在编译时会收到相同的警告 适用于 iOS。
关于objective-c - 为什么 NSInteger 变量在用作格式参数时必须转换为 long?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16075559/