随着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底部附近.