Неправильно работает определение разрядности операционной системы - C (СИ)
Формулировка задачи:
Разбирался с возможностью определения разрядности операционной системы и был сильно удивлен:
Данный код присваивает ss равный I32 на моей 64-разрядной системе. Сначала подумал что это компилятор балбес не настроен(Dev-Cpp 4.9.9.2), пошел в Visual Studio 2012, там та же ерунда.
Вопрос: почему?
Винда стоит х64, процессор, соответственно, тоже.
На всякий случай прилагаю скрин сведений о компе.
#include <stdio.h> #include <stdlib.h> #if (defined(_WIN32)) #define ss "I32" #else #define ss "I64" #endif int main() { printf("%s\n", ss); system("PAUSE"); return 0; }
Решение задачи: «Неправильно работает определение разрядности операционной системы»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> BOOL Is64BitOperatingSystem(void) { const char* dir = getenv("PROGRAMFILES(x86)"); return dir != NULL ? TRUE : FALSE; } int main(int argc, char *argv[]) { if (Is64BitOperatingSystem()) printf("%s","Use windows x64"); else printf("%s","Use windows x32"); system("pause"); return 0; }
Объяснение кода листинга программы
- В функции
Is64BitOperatingSystem
определяется переменнаяdir
, которая содержит значение переменной средыPROGRAMFILES(x86)
. - Если
dir
не равноNULL
, то функция возвращаетTRUE
, иначеFALSE
. - В функции
main
вызывается функцияIs64BitOperatingSystem
. - Если результат функции
Is64BitOperatingSystem
равенTRUE
, то выводится сообщениеUse windows x64
. - Если результат функции
Is64BitOperatingSystem
равенFALSE
, то выводится сообщениеUse windows x32
. - Вызывается функция
system(
pause)
, чтобы программа приостановила выполнение до нажатия клавиши. - Функция
main
возвращает 0, что означает успешное завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д