[c++] Обнаружение времени компиляции архитектуры процессора


1 Answers

Нет стандарта межкомпилирования, но каждый компилятор имеет тенденцию быть вполне последовательным. Вы можете создать заголовок для себя, что-то вроде этого:

#if MSVC
#ifdef _M_X86
#define ARCH_X86
#endif
#endif

#if GCC
#ifdef __i386__
#define ARCH_X86
#endif
#endif

Нет большого смысла в исчерпывающем списке, потому что тысячи компиляторов, но только 3-4 в широком использовании (Microsoft C ++, GCC, Intel CC, возможно, TenDRA?). Просто решайте, какие компиляторы будут поддерживать ваше приложение, перечислите их #defines и обновите свой заголовок по мере необходимости.

Question

Каков самый надежный способ узнать архитектуру процессора при компиляции кода C или C ++? Насколько я могу судить, разные компиляторы имеют свой собственный набор нестандартных определений препроцессора ( _M_X86 в __i386__ , __arm__ , __arm__ в GCC и т. Д.).

Существует ли стандартный способ определения архитектуры, для которой я строю? Если нет, есть ли источник исчерпывающего списка таких определений для разных компиляторов, таких как заголовок со всем шаблоном #ifdef s?




Нет ничего стандартного. Брайан Хук задокументировал кучу этих данных в своей «Portable Open Source Harness» и даже пытается превратить их в нечто последовательное и полезное (ymmv относительно этого). См. Заголовок posh.h на этом сайте:

Обратите внимание, что приведенная выше ссылка может потребовать, чтобы вы ввели некоторое фиктивное имя пользователя / пароль из-за атаки DOS некоторое время назад.




Related