Ios %32位和64位的d格式
给出: 警告:格式指定类型“int”,但参数的类型为 “NSInteger”(又名“long”) Xcode建议将Ios %32位和64位的d格式,ios,objective-c,xcode,macos,Ios,Objective C,Xcode,Macos,给出: 警告:格式指定类型“int”,但参数的类型为 “NSInteger”(又名“long”) Xcode建议将%d更改为%ld 但是,它仅适用于32位或64位目标,因为NSInteger是: NSInteger precedence = [self operatorPrecedence]; [d appendFormat:@"precedence:%d, ", precedence]; 对于32位和64位目标,消除警告的最佳方法是什么 对于NSInteger,使用%ld并将值强制转换为lo
%d
更改为%ld
但是,它仅适用于32位或64位目标,因为NSInteger
是:
NSInteger precedence = [self operatorPrecedence];
[d appendFormat:@"precedence:%d, ", precedence];
对于32位和64位目标,消除警告的最佳方法是什么
对于NSInteger
,使用%ld
并将值强制转换为long
#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
试试这个
UPD:
[d appendFormat:@"precedence:%ld, ", (long)precedence];
如果您只支持10.8及更高版本,您甚至不必为32位编译(32位计算机无法运行10.8)。代码在OS X和iOS上运行。%ld不强制转换将使Xcode 5.1中的警告静音。安全吗?这将截断64位中的某些值,因为
NSInteger
是64位类型,而int
仅为32位。
NSInteger precedence = [self operatorPrecedence];
[d appendFormat:@"precedence:%ld, ", (long)precedence];