是否应使用条件编译来应对不同体系结构上CGFloat的差异?

马特·吉布森(Matt Gibson)

在回答这个关于ceil()在CGFloat上为所有架构进行编译的早期问题时,我提出了以下解决方案:

    var x = CGFloat(0.5)

    var result: CGFloat

    #if arch(x86_64) || arch(arm64)
        result = ceil(x)
    #else
        result = ceilf(x)
    #endif

    // use result

(针对那些已经感到困惑的人的背景信息:对于32位架构,CGFloat是“ float”类型,对于64位架构(即,编译目标),CGFloat是“ double”,这就是为什么仅使用其中之一ceil()ceilf()使用它的原因编译,具体取决于目标体系结构。请注意,您似乎无法CGFLOAT_IS_DOUBLE用于条件编译,只能使用体系结构标志...)

现在,在有关在编译时与运行时修复问题等问题的评论中,这引起了一些辩论。我认为我的回答被接受的太快了,以至于无法引起对此的一些好的辩论。

因此,我的新问题是:如果您希望iOS和OS X代码在32位和64位设备上运行,那么上述操作是安全,明智的做法吗?而且,如果这理智和明智的,那么还有更好的解决方案(至少有效,而不是“棘手”)吗?

让·勒·莫伊南(Jean Le Moignan)

马特

在您的解决方案的基础上,如果您在多个地方使用它,那么稍加扩展可能会使它更可口:

extension CGFloat {
    var ceil: CGFloat {
        #if arch(x86_64) || arch(arm64)
            return ceil(x)
        #else
            return ceilf(x)
        #endif
    }
}

其余代码将更加简洁:

var x = CGFloat(0.5)
x.ceil

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

编译时按体系结构排除go源文件

来自分类Dev

什么时候可以使用企业体系结构框架来记录解决方案体系结构?

来自分类Dev

在ARM体系结构中不同的处理器模式下如何使用内核堆栈?

来自分类Dev

我可以使用哪个预定义的宏来检测Clang中的目标体系结构?

来自分类Dev

是否应使用条件编译来解决不同体系结构上CGFloat的差异?

来自分类Dev

静态链接的c ++二进制文件是否可以在具有相同体系结构的每个系统上工作?

来自分类Dev

是否有LLVM的替代库,用于为体系结构特定代码编译特定的IR?

来自分类Dev

XCode是否根据CPU体系结构选择了不同的源文件?

来自分类Dev

单个编译的C程序如何在多个体系结构上运行?

来自分类Dev

Consul / Registrator体系结构-每个VM上是否需要一个单独的Consul代理?

来自分类Dev

REST API是否应反映服务器端应用程序体系结构

来自分类Dev

汇编语言在一种体系结构与另一种体系结构之间是否有所不同?

来自分类Dev

如何指示CMake使用构建体系结构编译器

来自分类Dev

使用Agner的Vector Class Library编译多体系结构代码

来自分类Dev

为什么相同的gcc编译选项在不同的计算机体系结构上会有不同的表现?

来自分类Dev

生成APK不同体系结构 - FFmpegMediaMetadataRetriever

来自分类Dev

在具有不同体系结构的群集上应指定哪个AVX和行军?

来自分类Dev

什么时候可以使用企业体系结构框架来记录解决方案体系结构?

来自分类Dev

所有GPU是否都使用相同的体系结构?

来自分类Dev

使用WCF的面向服务的体系结构

来自分类Dev

静态链接的c ++二进制文件能否在具有相同体系结构的每个系统上工作?

来自分类Dev

Windows 8 / 8.1上的Modern IE10 / 11是否使用多进程体系结构?

来自分类Dev

在不同的ARM体系结构上编程

来自分类Dev

如何使相同的已编译C代码在不同体系结构上工作而又无需再次对其进行编译?

来自分类Dev

具有CPU密集型服务器端任务的网站应使用哪种体系结构?

来自分类Dev

即使使用Multi-Arch,APT版本也会在不同体系结构之间发生冲突:是吗?

来自分类Dev

使用g ++编译C ++程序的体系结构x86_64的未定义符号

来自分类Dev

getCString和withCString在不同体系结构上的行为

来自分类Dev

使用消息队列的项目体系结构

Related 相关文章

  1. 1

    编译时按体系结构排除go源文件

  2. 2

    什么时候可以使用企业体系结构框架来记录解决方案体系结构?

  3. 3

    在ARM体系结构中不同的处理器模式下如何使用内核堆栈?

  4. 4

    我可以使用哪个预定义的宏来检测Clang中的目标体系结构?

  5. 5

    是否应使用条件编译来解决不同体系结构上CGFloat的差异?

  6. 6

    静态链接的c ++二进制文件是否可以在具有相同体系结构的每个系统上工作?

  7. 7

    是否有LLVM的替代库,用于为体系结构特定代码编译特定的IR?

  8. 8

    XCode是否根据CPU体系结构选择了不同的源文件?

  9. 9

    单个编译的C程序如何在多个体系结构上运行?

  10. 10

    Consul / Registrator体系结构-每个VM上是否需要一个单独的Consul代理?

  11. 11

    REST API是否应反映服务器端应用程序体系结构

  12. 12

    汇编语言在一种体系结构与另一种体系结构之间是否有所不同?

  13. 13

    如何指示CMake使用构建体系结构编译器

  14. 14

    使用Agner的Vector Class Library编译多体系结构代码

  15. 15

    为什么相同的gcc编译选项在不同的计算机体系结构上会有不同的表现?

  16. 16

    生成APK不同体系结构 - FFmpegMediaMetadataRetriever

  17. 17

    在具有不同体系结构的群集上应指定哪个AVX和行军?

  18. 18

    什么时候可以使用企业体系结构框架来记录解决方案体系结构?

  19. 19

    所有GPU是否都使用相同的体系结构?

  20. 20

    使用WCF的面向服务的体系结构

  21. 21

    静态链接的c ++二进制文件能否在具有相同体系结构的每个系统上工作?

  22. 22

    Windows 8 / 8.1上的Modern IE10 / 11是否使用多进程体系结构?

  23. 23

    在不同的ARM体系结构上编程

  24. 24

    如何使相同的已编译C代码在不同体系结构上工作而又无需再次对其进行编译?

  25. 25

    具有CPU密集型服务器端任务的网站应使用哪种体系结构?

  26. 26

    即使使用Multi-Arch,APT版本也会在不同体系结构之间发生冲突:是吗?

  27. 27

    使用g ++编译C ++程序的体系结构x86_64的未定义符号

  28. 28

    getCString和withCString在不同体系结构上的行为

  29. 29

    使用消息队列的项目体系结构

热门标签

归档