Как определить, запущена ли программа на платформах x86 / x64 или ARM Linux

В программе c я хочу делать разные вещи. Эта программа будет работать на основе GNU / Linux на основе x86 / x64, а также на основе ARM, например, на ПК или RaspberryPI.

Есть предопределенные macros в GCC, чтобы рассказать о платформе?

что-то вроде

 #ifdef _X64_ /do x64 stuff #elif _ARM_ //do arm stuff #endif 

Или, может быть, это неправильный подход? Я буду использовать Makefile для компиляции, и я могу уйти от своих собственных определений.

Какой был бы лучший / безопасный подход?

На эти должности уже были дан ответ:
Предопределенные macros GCC для архитектуры X , определение времени компиляции архитектуры процессора

Вы можете иметь их здесь:
http://sourceforge.net/p/predef/wiki/Architectures/

Ваш подход должен использоваться только для небольших частей кода или функций, но он должен работать.

Редактировать:
В принципе, поскольку ссылки могут стать недействительными:
__arm__ должен работать на ARM.
__x86_64__ должен работать с архитектурой x64.

И да, вы можете сделать:

 #ifdef __x86_64__ // do x64 stuff #elif __arm__ // do arm stuff #endif