A NSInteger
在32位平台上为32位,在64位平台上为64位。是否有一个NSLog
始终与大小匹配的说明符NSInteger
?
建立
- 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:]
。
static inline NSIntToLong(NSInteger i) {return (long)i;}
。这样可以避免完全禁用类型检查(即,如果i的类型发生更改)。