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

What predefined macro can I use to detect the target architecture in Clang?

我想根据目标架构是否是例如来编写代码 armv7,armv7s或arm64。

我不能使用sysctlbyname的原因是,这将在运行时为我提供底层体系结构,但在arm64例如 模拟armv7,sysctl(看似)仍报告arm64。


尽管这不是该问题的100%答案,但可能有用:

使用clang时,您可以使用以下方法区分32位臂和64位臂:

__arm__,仅针对32位臂定义。

__aarch64__,仅针对64位ARM定义。


clang --target=... -mcpu=... -E - -dM 将输出所有预定义的预处理器宏(gcc的工作也与此类似)

我看不到单个宏可以提供答案,但是您可能可以使用__ARM_ARCHdefined(__ARM_ARCH_*)的某种组合。


如果__ARM_ARCH_ISA_A64的目标是arm64,则已预定义,

__ARM_ARCH_7S__对于armv7,

__ARM_ARCH_7A__用于armv7。

使用:clang -arch arm64 -E -dM - < /dev/null可以输出预处理宏。