【发布时间】:2011-05-23 05:52:18
【问题描述】:
NSInteger 在 32 位平台上为 32 位,在 64 位平台上为 64 位。是否存在始终与 NSInteger 的大小匹配的 NSLog 说明符?
设置
- Xcode 3.2.5
- llvm 1.6 编译器(这很重要;gcc 不这样做)
-
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:]。
【问题讨论】:
标签: objective-c cocoa 32bit-64bit nslog nsinteger