簡體   English   中英

%d格式化為32位和64位

[英]%d formatting for both 32-bit and 64-bit

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

得到:

警告:Format指定類型'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位目標,殺死警告的最佳方法是什么?

按照Apple的64位過渡指南中的說明進行操作

對於NSInteger ,使用%ld並將值NSIntegerlong

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

試試這個

UPD:

NSInteger precedence = [self operatorPrecedence];
[d appendFormat:@"precedence:%ld, ", (long)precedence];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM