objective-c – NSInteger的NSLogprintf说明符?

objective-c – NSInteger的NSLogprintf说明符?,第1张

概述NSInteger在32位平台上为32位,在64位平台上为64位。是否有一个NSLog说明符总是匹配NSInteger的大小? 建立 > Xcode 3.2.5 > llvm 1.6 compiler(这很重要; gcc不这样做) > GCC_WARN_TYPECHECK_CALLS_TO_PRINTF已启用 这让我有些悲伤: #import <Foundation/Foundation.h> NSInteger在32位平台上为32位,在64位平台上为64位。是否有一个NSLog说明符总是匹配NSInteger的大小?

建立

> 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说明符?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1049216.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存