Неправильно работает определение разрядности операционной системы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Разбирался с возможностью определения разрядности операционной системы и был сильно удивлен:
#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;
}
Данный код присваивает ss равный I32 на моей 64-разрядной системе. Сначала подумал что это компилятор балбес не настроен(Dev-Cpp 4.9.9.2), пошел в Visual Studio 2012, там та же ерунда. Вопрос: почему? Винда стоит х64, процессор, соответственно, тоже. На всякий случай прилагаю скрин сведений о компе.

Решение задачи: «Неправильно работает определение разрядности операционной системы»

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;
}

Объяснение кода листинга программы

  1. В функции Is64BitOperatingSystem определяется переменная dir, которая содержит значение переменной среды PROGRAMFILES(x86).
  2. Если dir не равно NULL, то функция возвращает TRUE, иначе FALSE.
  3. В функции main вызывается функция Is64BitOperatingSystem.
  4. Если результат функции Is64BitOperatingSystem равен TRUE, то выводится сообщение Use windows x64.
  5. Если результат функции Is64BitOperatingSystem равен FALSE, то выводится сообщение Use windows x32.
  6. Вызывается функция system(pause), чтобы программа приостановила выполнение до нажатия клавиши.
  7. Функция main возвращает 0, что означает успешное завершение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы