最佳答案
NSInteger
在32位平台上是32位,在64位平台上是64位。是否有一个 NSLog
说明符总是匹配 NSInteger
的大小?
设置
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF
这让我很伤心:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
@autoreleasepool {
NSInteger i = 0;
NSLog(@"%d", i);
}
return 0;
}
对于32位代码,我需要 %d
说明符。但是如果我使用 %d
说明符,我在编译64位时会得到一个警告,建议我改用 %ld
。
如果我使用 %ld
来匹配64位大小,当编译32位代码时,我会得到一个警告,建议我使用 %d
代替。
如何同时修复这两个警告? 是否有一个说明符,我可以使用它们中的任何一个?
这也会影响 [NSString stringWithFormat:]
和 [[NSString alloc] initWithFormat:]
。