【问题标题】:Removing warnings of 64bit SDK删除 64 位 SDK 的警告
【发布时间】:2015-05-05 07:28:18
【问题描述】:

我猜现在每个人都将使用 Xcode 5.1 及更高版本。一旦我们向有效架构添加 64 位支持,编译器就会抛出与 64 位数据类型相关的警告。如果我更改了 64 位的数据类型,我正在开发 iOS6.0 支持的应用程序,它在 32 位设备中可以正常工作吗?因为,将数据类型更改为 64 位会为 32 位创建编译器警告。 提前致谢。

【问题讨论】:

  • 您可能想阅读可可触摸应用程序的 64 位转换指南,该指南位于 link
  • 不应该。并尝试使用不会受到 64 位或 32 位更改影响的数据类型。就像使用 NSInteger 而不是普通的 int 等...

标签: ios objective-c iphone 32bit-64bit


【解决方案1】:

如果您真的担心数据类型大小,那么在您的编码中明确并使用无论编译器如何都可以工作的标准类型。

uint8_t, uint16_t, uint32_t and uint64_t
int8_t,int16_t,int32_t and int64_t

对于 64 位和 32 位,您真正需要担心的唯一地方是您是否在编码中对结构的字节对齐做出假设。然而,解决方案是也使用标准类型。

对于像 NSLog 这样的你会遇到很多与使用 NSInteger 类型类型相关的错误,你应该将它们转换为你希望它们在格式语句中的含义。 xcode 通常会为您解决这些问题。

您是否担心任何具体的 32/64 示例?

【讨论】:

  • 没有具体示例,但我收到很多警告,要求 32 位转换为 64 位类型。所以,只是想确保我是否根据 xcode 建议的转换它们在 32 位设备上运行时不会以任何方式影响应用程序..
  • 你能举几个例子,让我看看它是什么类型的警告,在什么情况下?我收到的大多数警告都在我让 xcode 修复的 NSLog 上。如果错误与混合使用 short、int、long、long long 等有关,请尝试不要混合使用 int 和 long(使用 long)或转而使用标准类型。从 32 位到 64 位不太可能失去任何东西,因为它增加了更多的数字范围。如答案所述,它假设结构对齐偏移量、指针大小相同,并且在真正问题所在的 32/64 位上从不同设备向服务器读取/写入二进制数据。
  • 例如:1. 警告:隐式转换失去整数精度:'NSInteger'(又名'long')到'int - button tag int。 2. 警告:隐式转换失去整数精度:'NSUInteger' (aka 'unsigned long') 到 'int' - [array count] 将其分配给 int 3. 警告:'NSInteger' 类型的值不应用作格式参数;改为将显式强制转换为“long”
  • 好的,有道理,不会给您带来问题,因为您的代码似乎可以使用整数。您最好使用标准类型或使用 long 而不是 int。格式化引发了问题,因为它可能被编码为预期 NSInteger 和 NSUInteger 将来可能会改变大小,可能是在 128 位进入 8^) 时。对于这些转换为 (long) 或 (unsigned long)。不过我的建议是使用标准类型或使用 NSInteger 和 NSUInteger。
猜你喜欢
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-25
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
相关资源
最近更新 更多