Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在gcc中,如何在编译时识别x86与x86_64?_C_Linux_Macros - Fatal编程技术网

在gcc中,如何在编译时识别x86与x86_64?

在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

我只想在x86和x86_64 linux上编译部分代码,但不想在s390 linux或其他系统上编译。如何使用C中的宏定义来实现它?我知道linux决定linux操作系统,而386486586决定CPU架构。是否有一个简单的宏定义来确定x86 linux和x86_64 linux?谢谢

如果您的编译器没有提供预定义的宏和常量,您可以自己定义:
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也会做你期望的事情。您可能想看看这个: