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

Macros 我可以使用什么预定义宏来检测Clang中的目标体系结构?,macros,arm,clang,Macros,Arm,Clang,我想根据目标体系结构是armv7、armv7s还是arm64来编写代码 我不能使用的原因是,这将在运行时为我提供底层架构,但当arm64(例如,模拟armv7)时,sysctl(似乎)仍然报告arm64。clang--target=-mcpu=-E--dM\uuu ARM\uarch\uISA\uA64是预定义的,如果它的目标是arm64 \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu7s\uuuuuuuuuuuuuuuuu

我想根据目标体系结构是armv7、armv7s还是arm64来编写代码


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

clang--target=-mcpu=-E--dM
\uuu ARM\uarch\uISA\uA64
是预定义的,如果它的目标是arm64

\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu7s\uuuuuuuuuuuuuuuuu

用于armv7的
\uuuuuu臂拱7A\uuuuuuuu


使用:
clang-arch arm64-E-dM-
,它可以输出预处理宏。

虽然这不是问题的100%答案,但可能有用:

使用clang时,您可以通过以下方式区分32位arm和64位arm:

\uuuuu arm\uuuuuu
它是为32位arm和32位arm定义的


\uuuuAARCH64\uuuuuuuuuuu>是为64位arm定义的,并且仅为64位arm。

为什么会出现问题?根据定义,64位代码知道它在AArch64状态的v8上运行。如果32位代码看到“arm64”或任何其他(不准确的)v8同义词,则可以推断它在AArch32状态的v8上运行。如果您没有在运行时执行动态调度,那么您的目标体系结构就是您选择编译的目标体系结构。我想报告目标体系结构。这是问题还是答案?请详细说明。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。
\uuu ARM\u ARCH\u ISA\u A64
是预定义的,如果其目标是arm64<代码>\uuuuu ARM\u ARCH\u 7S\uuuuu
用于armv7s,而
\uuuuuuuu ARM\u ARCH\u 7A\uuuuu
用于armv7。使用
clang-arch-arm64-E-dM-
可以输出预处理马可,我在这里找到了。@fengxing你在“this”中找到了它。源在哪里?
\uu ARM\u ARCH
同时拾取32位和64位ARM机器。我相信布拉姆的答案更接近正确答案。