Как можно найти с помощью c-программы, будет ли моя машина 16-разрядной или 32-разрядной или 64-разрядной

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

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

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

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

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

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

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

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

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

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

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

Вы можете использовать приведенные выше инструменты в своей программе.

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

 #ifdef __i386__ blahblah #elif __arm__ blahblah #elif defined(__x86_64__) || defined(_M_AMD64) || defined (_M_X64) blahblah #endif 

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

 #include  int main(int argc, char ** arv){ std::cout << "sizeof(void*)=" << sizeof(void*) << std::endl; return 0; }