建立
> Xcode 3.2.5
> llvm 1.6 compiler(这很重要; 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:]。
解决方法 更新答案:使用当前的Xcode,你可以使用z和t修饰符来处理NSInteger和NSUInteger没有警告,在所有的架构。
您要对带符号使用%zd,对无符号使用%tu,对十六进制使用%tx。
此信息由Greg Parker提供。
原始答案:
official recommended approach是使用%ld作为您的说明符,并将实际参数转换为long。
总结以上是内存溢出为你收集整理的objective-c – NSInteger的NSLog/printf说明符?全部内容,希望文章能够帮你解决objective-c – NSInteger的NSLog/printf说明符?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)