【发布时间】:2013-04-18 06:01:19
【问题描述】:
NSInteger myInt = 1804809223;
NSLog(@"%i", myInt); <====
上面的代码产生错误:
“NSInteger”类型的值不应用作格式参数;改为将显式强制转换为“long”
更正后的NSLog 消息实际上是NSLog(@"%lg", (long) myInt);。如果要显示值,为什么必须将 myInt 的整数值转换为 long?
【问题讨论】:
-
@DanielLee,如果你使用
NSLog(@"%ld", (long) myInt);,long演员表是为了使它与%ld的l限定符匹配,但所有这些都是不必要的,因为NSLog(@"%d", myInt);就足够了(假设我们可以看到myInt不是long。底线,如果在格式字符串中使用长限定符,你可以转换myInt,但不需要使用长字符串格式限定符或long在此处转换. -
显然,NSLog(@"%i", myInt);就足够了,因为您将收到我上面显示的错误消息。
-
@DanielLee 查看 Martin R 的评论。您使用 iOS 标签发布了您的问题(其中
NSInteger是 not 长),但听起来您正在使用 OS X 目标进行编译(其中NSIntegeris @ 987654337@). -
啊,我明白了。我不知道 iOS 和 OSX 会使 NSInteger 在位和类型上有所不同。
标签: objective-c xcode casting nsinteger