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

给出:

警告:格式指定类型“int”,但参数的类型为“NSInteger”(又名“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 位目标,消除警告的最佳方法是什么?

4

2 回答 2

12

按照Apple 的 64 位转换指南中的说明进行操作

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

[d appendFormat:@"precedence:%ld, ", (long)precedence];
于 2013-01-23T04:34:58.723 回答
-1

尝试这个

升级版:

NSInteger precedence = [self operatorPrecedence];
[d appendFormat:@"precedence:%ld, ", (long)precedence];
于 2013-01-23T04:35:22.677 回答