ios – 在Cocoa中存在什么定义__LP64__和__arm64__,在编译时区分平台?他们在哪里或如何定义?

随着arm64作为 iphoneos平台的标准体系结构,在某些情况下,需要为64/32架构的特定代码实现编译时条件.

如果您查看CoreGraphics / CGBase.h以及一些流行的开源项目是否为providing support for arm64,那么您可以通过以下方式检查64位运行库的存在:

#if defined(__LP64__) && __LP64__
...
#else
...
#endif

也可以专门检查arm64(而不是只是64位运行时),如this fix for erikdoe/ocmock所述

#ifdef __arm64__
...
#else
....
#endif

有没有一个完整的列表,或这些类型的定义的文档?他们在哪里或如何定义?

解决方法

这些宏并不特定于Cocoa,它们特定于CLANG,它们可以在命令行中列出:

clang -dM -E -x c / dev / null

不同的CLANG版本附带不同数量的功能标志,可以在配置时打开或关闭,或者取决于编译器正在运行的平台和操作系统.在testing headers中可以找到一个相当全面的列表,每个支持的系统的变体也分散在测试目录中.每个文档取决于该标志是否特定于CLANG,或者在其链接的一个标准库中定义(例如__llvm__是defined by CLANG,但__WCHAR_WIDTH__由LibC定义).因为这个原因,确实没有完整的列表.只要遵守语言规范,不同的平台就可以略有不同.

大多数有趣的公共Objective-C宏存在于Foundation / NSObjCRuntime.h底部附近.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...