Как определить с помощью c-программы, является ли мой компьютер 16-битным, 32-битным или 64-битным - PullRequest
2 голосов
/ 06 сентября 2010

Может кто-нибудь дать простую c-программу, чтобы определить, является ли мой компьютер 16-битным, 32-битным или 64-битным?

Ответы [ 6 ]

4 голосов
/ 06 сентября 2010

Если вас беспокоит только ОС Linux, тогда вы можете использовать вызов uname (). Вы можете передать struct utsname этому API и получить подробную информацию. Вы можете получить более подробную информацию по следующему URL

http://linux.die.net/man/2/uname

Кроме того, изучение исходного кода команды uname может помочь вам в этом.

1 голос
/ 06 сентября 2010

Как «деталь реализации», это именно та вещь, которая не входит в формальную спецификацию языка C;учитывая, что компилятор теоретически должен скрывать это от вас, все, что вы могли бы сделать, чтобы выяснить эту информацию, технически зависит от «неопределенного нестандартного поведения».

Это педантичный ответ.Практический ответ: вы можете использовать sizeof(int) для определения ширины регистра в вашей конкретной архитектуре с помощью любого разумного компилятора.

Обратите внимание, что это определяется во время компиляции, а не во время выполнения, поэтому он сообщает вам, является ли ваше приложениебыл скомпилирован в 32-разрядном или 64-разрядном (или любом другом) режиме, а не , например , запущенном на 64-разрядном компьютере, эмулирующем 32-разрядный x86.Для такого рода информации вам нужно взглянуть на вещи, полностью зависящие от платформы, такие как CPUID.

0 голосов
/ 08 января 2015

Вы можете использовать препроцессор:

#ifdef __i386__
    blahblah
#elif __arm__
    blahblah
#elif defined(__x86_64__) || defined(_M_AMD64) || defined (_M_X64)
     blahblah
#endif
0 голосов
/ 06 сентября 2010

Здесь есть несколько уровней компилятор - ОС - Процессор.Получение машинной арки из пользовательской программы на C не рекомендуется, потому что у вас недостаточно информации и она не переносима.

Однако, если вы хотите знать, для какой конкретной ОС, такой как linux, вот ссылка

Вы можете воспользоваться помощью вышеперечисленных инструментов в вашей программе.

0 голосов
/ 06 сентября 2010

Компилятор должен знать во время компиляции для какой архитектуры он собирается, поэтому не нужно определять это в runtime .

Компиляторбудет обычно иметь предопределенный макрос, указывающий архитектуру;вам придется проверить все архитектуры, для которых вы собираетесь строить.Список таких макросов для различных архитектур приведен по адресу http://predef.sourceforge.net/prearch.html

0 голосов
/ 06 сентября 2010

Это должно работать:

#include <iostream>
int main(int argc, char ** arv){
  std::cout << "sizeof(void*)=" << sizeof(void*) << std::endl;
  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...