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

标签 objective-c xcode casting nsinteger

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/

相关文章:

C++ 混合指向不同 char 类型的指针

iphone - 如何在 NSMutableArray 中创建查询并打印结果?

ios - 创建临时 CoreData 实体(在非持久性 MagicalRecord 上下文中)?

ios - 本地化 Storyboard的修改 - 转换为基础 Storyboard

xcode - 带有无效校验和的XCode 4.3命令行工具包

xcode - 不支持架构 - Xcode 错误

iphone - 在 3/4 行之后,scrollToRowAtIndexPath 未滚动到正确的行

objective-c - 如何让 UIView 忽略触摸而不释放它?

c++ - 转换 COM 接口(interface)

c++ - 具有相同复制值的类型转换问题到新数组类型