Неправильно работает определение разрядности операционной системы - 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, что означает успешное завершение программы.