【问题标题】:Best C type strategy for writing apps for iOS and Mac OS X为 iOS 和 Mac OS X 编写应用程序的最佳 C 类型策略
【发布时间】:2013-09-13 14:31:09
【问题描述】:

我正在同时为 iOS 和 Mac OS X 编写一个 OpenGL(ES) 应用程序。代码的某些部分是特定于平台的,我使用条件编译,但大部分代码对两个平台都是通用的。

我开始在 iOS 中开发我的代码。当我第一次尝试为 Mac 编译时,我意识到在桌面上,CGFloatNSUInteger 等基本 cocoa C 类型是 64 位的(即分别为 doubleunsigned long,而不是 floatunsigned int),所以我收到了很多“隐式的沮丧警告”:

  1. 我将CGFloat 分配给GLfloat
  2. NSLog() 使用 %u 编辑了一个 NSUInteger

关于#1,我可以在任何地方切换到使用float 而不是CGFloat,但我还需要CGSizeCGRectCGPoint,这样也会导致问题。

关于#2,我可以切换到使用uint 而不是NSUInteger,但可可在任何地方都使用NSUInteger(例如[NSArray count])。

关于基本 C 类型,编写最干净的代码并且在 iOS 和 OS X 上编译时没有大量警告的最佳策略(或建议)是什么?

【问题讨论】:

  • ...aaaand Apple 宣布 iOS 过渡到 64 位!!!剧情变厚了!

标签: ios objective-c macos cocoa 32bit-64bit


【解决方案1】:

加上 iOS 现在也有 64 位架构这一事实,我发现尽可能使用显式类型是最好的选择。 Game Center 框架通过分数 (int_64t) 正是这样做的。另一方面,Core Audio 似乎使用定义的类型SInt32Uint64 等。 从 CGPoint/CGRect 获取浮点数以传递给 OpenGL ES 可能会有点棘手,不过......

此外,我建议端到端阅读Apple's transition guide

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 2011-09-24
    相关资源
    最近更新 更多