Как определить x86 vs. x86_64 во время компиляции в gcc?

Я хочу скомпилировать часть своего кода только для x86 и x86_64 linux, но не для s390 linux или других. Как использовать макрос в C для его достижения? Я знаю, что Linux должен определить ОС Linux и 386 , 486 и 586 для определения архитектуры ЦП. Есть ли простой макрос для определения x86 linux и x86_64 linux? Спасибо

Вы можете определить, легко ли вы в 64-битном режиме:

 #if defined(__x86_64__) /* 64 bit detected */ #endif #if defined(__i386__) /* 32 bit x86 detected */ #endif 

Если ваш компилятор не предоставляет предопределенные macros и константы, вы можете определить его самостоятельно: gcc -D WHATEVER_YOU_WANT .

Дополнительная наgradleа: если вы компилируете свой код, скажем, amd64 , но вы не определяете amd64 , вы можете сравнить результаты (версию, использующую специальные части amd64, а также общую версию) и посмотреть, стоит ли ваша оптимизация amd64 усилия.