Ste*_*her 126 cocoa objective-c nslog nsinteger 32bit-64bit
A 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;
}
Run Code Online (Sandbox Code Playgroud)
对于32位代码,我需要说明%d符.但是,如果我使用说明%d符,我在编译64位时会收到警告,建议我使用%ld.
如果我使用%ld匹配64位大小,编译32位代码时,我会收到警告,建议我使用%d.
如何一次修复这两个警告?是否有我可以使用的说明符?
这也影响[NSString stringWithFormat:]和[[NSString alloc] initWithFormat:].
Lil*_*ard 288
更新的答案:
使用当前的Xcode,您可以在所有体系结构上使用z和t修饰符来处理NSInteger并且NSUInteger不需要警告.
您想要%zd用于signed,%tufor unsigned和%txfor hex.
这些信息来自Greg Parker.
原始答案:
该负责人建议的方法是使用%ld为你的符,并且实际参数转换为long.
| 归档时间: |
|
| 查看次数: |
71854 次 |
| 最近记录: |