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

前端之家收集整理的这篇文章主要介绍了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相关文章