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

Jac*_*255 4 c linux macros

我想仅在x86和x86_64 linux上编译我的部分代码,而不是s390 linux或其他.如何在C中使用宏定义来实现呢?我知道linux的是要确定Linux操作系统,以及386,486586,以确定CPU架构.是否有一个简单的宏定义来确定x86 linux和x86_64 linux?谢谢

Dav*_*zer 13

您可以轻松检测是否处于64位模式:

#if defined(__x86_64__)
/* 64 bit detected */
#endif
#if defined(__i386__)
/* 32 bit x86 detected */
#endif
Run Code Online (Sandbox Code Playgroud)


ern*_*rn0 1

如果您的编译器没有提供预定义的宏和常量,您可以自己定义:gcc -D WHATEVER_YOU_WANT

额外的奖励:如果您编译代码,例如,amd64但没有定义amd64,您可以比较结果(使用amd64特定部分的版本与通用版本)并查看您的amd64优化是否值得付出努力。