为iOS和Mac OS X编写应用程序的最佳C类型策略

为iOS和Mac OS X编写应用程序的最佳C类型策略,ios,objective-c,macos,cocoa,32bit-64bit,Ios,Objective C,Macos,Cocoa,32bit 64bit,我正在同时为iOS和MacOSX编写一个OpenGL(ES)应用程序。代码的某些部分是特定于平台的,我使用条件编译,但其中大部分对两个平台都是通用的 我开始用iOS开发代码。当我第一次尝试为Mac编译时,我意识到在桌面上,基本的cocoa C类型,如CGFloat和NSUInteger是64位的(即分别是double和unsigned long,而不是float和unsigned int),因此我得到了很多“隐式向下广播警告”当: 我将CGFloat分配给GLfloat INSLog()使用%u

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

我开始用iOS开发代码。当我第一次尝试为Mac编译时,我意识到在桌面上,基本的cocoa C类型,如
CGFloat
NSUInteger
是64位的(即分别是
double
unsigned long
,而不是
float
unsigned int
),因此我得到了很多“隐式向下广播警告”当:

  • 我将
    CGFloat
    分配给
    GLfloat
  • I
    NSLog()
    使用
    %u
  • 关于#1,我可以在任何地方使用
    float
    而不是
    CGFloat
    ,但我还需要
    CGSize
    CGRect
    CGPoint
    ,这样也会造成问题

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


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

    加上iOS现在也有64位体系结构这一事实,我发现尽可能使用显式类型是最好的选择。游戏中心框架正是通过分数(
    int\u 64t
    )来实现这一点的。另一方面,核心音频似乎使用定义的类型
    SInt32
    Uint64
    ,等等。 从
    CGPoint
    /
    CGRect
    获取浮点值以传递给OpenGL ES可能会有点棘手,不过


    此外,我建议大家从头读到脚

    …苹果宣布iOS过渡到64位!!!情节越来越复杂了!