2

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

我开始在 iOS 中开发我的代码。当我第一次尝试为 Mac 编译时,我意识到在桌面上,基本的 cocoa C 类型,例如CGFloatandNSUInteger是 64 位的(即,double分别unsigned long代替floatand unsigned int),所以当我收到很多“隐式向下转换警告”时:

  1. 我分配了CGFloat一个GLfloat
  2. NSLog()已经NSUInteger使用了%u

关于#1,我可以切换到 usingfloat而不是CGFloat到处使用,但我也需要CGSize, CGRectCGPoint这样也会导致问题。

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

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

4

1 回答 1

0

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

此外,我建议您阅读Apple 的端到端过渡指南。

于 2014-04-25T08:37:31.560 回答