objective-c - 为什么 NSInteger 变量在用作格式参数时必须转换为 long?

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。

https://stackoverflow.com/questions/16075559/

相关文章:

objective-c - 是否可以在 Objective-C 中将 -init 方法设为私有(pr

objective-c - 更改 NSView 的背景颜色的最佳方法

ios - 自定义 UITableView 标题部分

objective-c - 在 Objective-C 中大写或更改 NSString 的大小写

objective-c - 在objective-c中@符号代表什么?

ios - 在 SwiftUI/Swift/Objective-C/Xamarin 中将底部边框线添

ios - AppDelegate 的用途是什么,我如何知道何时使用它?

objective-c - Objective-C 中可为空、__nullable 和 _Nulla

ios - UIView 周围的虚线边框

objective-c - Objective-C 中是否存在强类型集合?