在gcc中,如何在编译时识别x86与x86_64?
我只想在x86和x86_64 linux上编译部分代码,但不想在s390 linux或其他系统上编译。如何使用C中的宏定义来实现它?我知道linux决定linux操作系统,而386、486和586决定CPU架构。是否有一个简单的宏定义来确定x86 linux和x86_64 linux?谢谢如果您的编译器没有提供预定义的宏和常量,您可以自己定义:在gcc中,如何在编译时识别x86与x86_64?,c,linux,macros,C,Linux,Macros,我只想在x86和x86_64 linux上编译部分代码,但不想在s390 linux或其他系统上编译。如何使用C中的宏定义来实现它?我知道linux决定linux操作系统,而386、486和586决定CPU架构。是否有一个简单的宏定义来确定x86 linux和x86_64 linux?谢谢如果您的编译器没有提供预定义的宏和常量,您可以自己定义:gcc-D任何您想要的 额外奖励:如果你为amd64编译代码,但你没有定义amd64,你可以比较结果(使用amd64特定部分的版本与通用版本),看看你的a
gcc-D任何您想要的
额外奖励:如果你为amd64编译代码,但你没有定义amd64,你可以比较结果(使用amd64特定部分的版本与通用版本),看看你的amd64优化是否值得付出努力。你可以很容易地检测到你是否处于64位模式:
#if defined(__x86_64__)
/* 64 bit detected */
#endif
#if defined(__i386__)
/* 32 bit x86 detected */
#endif
这还不清楚;x86是硬件平台,而不是操作系统…有了GCC,你可以使用这个
GCC-dM-E-
来显示所有的宏。你知道,我想我刚刚想出了这个名字。。你是说x86_64吗?可能是Hi-David的副本,我需要检测linux 86和linux 8664。您的解决方案可以检测8664和i386。但是i486和i584以及其他x86平台呢?我是否需要将其写为#如果定义(i386)|#如果定义(i486)|#如果定义(i586)?好的,i386将适用于所有基于Intel的32位Linux安装。如果你想深入挖掘,你可以。例如,amd64表示AMD架构上的64位系统。安腾应该是IA64。486、586和686也会做你期望的事情。您可能想看看这个: