ios - 32 位和 64 位的 %d 格式

标签 ios objective-c xcode macos

NSInteger precedence = [self operatorPrecedence];
[d appendFormat:@"precedence:%d, ", precedence];

给出:

Warning: Format specifies type 'int' but the argument has type 'NSInteger' (aka 'long')

并且 Xcode 建议将 %d 更改为 %ld

但是,它只适用于 32 位 64 位目标,因为 NSInteger 是:

 #if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
 typedef long NSInteger;
 typedef unsigned long NSUInteger;
 #else
 typedef int NSInteger;
 typedef unsigned int NSUInteger;
 #endif

对于 32 位和 64 位目标,消除警告的最佳方法是什么?

最佳答案

关注the instructions in Apple's 64-Bit Transition Guide .

对于 NSInteger,使用 %ld 并将值转换为 long

[d appendFormat:@"precedence:%ld, ", (long)precedence];

关于ios - 32 位和 64 位的 %d 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14472424/

相关文章:

objective-c - 动画 UIImageView 色调颜色不起作用

ios - 当表格处于编辑模式时,在 UITableView 部分标题上切换 UIButton

ios - 如何创建一个椭圆形的 UIView?

ios - Coredata VFS 标志 - 奇怪的日志

ios Javascript OnClick 函数

iphone - 在彼此下方添加多个 UILabel,每个标签具有可变行

ios - 新的 Playground 文件有什么问题?

objective-c - LLDB 摘要字符串 - 如何使它们在 Xcode session 中持久存在

ios - 将图像解析为 SESHAT 工具?

ios - 如何在 iOS 中模拟按下主页按钮?