Я думаю, что ваше решение, вероятно, действительно в большинстве случаев; безусловно, во всех стандартных моделях данных IA64 указатели являются 64-битными. Это, однако, может не относиться ко всем архитектурам в теории. Может быть безопаснее проверить sizeof(uintptr_t)
, если компилятор имеет заголовок C99; но опять же предполагается, что ширина адреса указывает на ширину регистра; это зависит от того, под "64-битным" вы ссылаетесь на диапазон адресов или диапазон целых чисел - они не обязательно должны совпадать.
Поскольку для 32-битной и 64-битной компиляции требуется либо другой компилятор, либо другой переключатель компилятора, целевая архитектура должна быть известна во время сборки и не должна определяться во время выполнения.
Большинство компиляторов предоставляют макросы со встроенной архитектурой, которые позволяют определять это во время сборки. Полный список таких макросов для различных компиляторов, ОС и архитектур определен по адресу: http://predef.sourceforge.net/