Должен ли я определять как _WIN32, так и _WIN64 в 64-битной сборке?
Когда мы добавляем 64-битную конфигурацию из уже существующего 32-битного проекта, Visual Studio копирует 32-битные конфигурации по умолчанию. VS даже копирует _WIN32
Все мои 64-битные проекты также определяют _WIN32, несмотря на то, что они (64-битные PE) никогда не могут работать на 32-битной Windows. Мне это очень неудобно.
Я хочу удалить _WIN32, если у него нет проблем. Я не уверен в этом.
Это нормально, если я удалю определение _WIN32?
Ответы
Ответ 1
_WIN32 не означает, что вы думаете. Это означает, что "я использую Windows API". 32 постфикса были добавлены во времена Windows NT 3.1, чтобы отличать его от 16-битного API, который использовался в Windows версии 3. Этот термин не понравился из-за проблемы с битрейтом. Вы можете увидеть это на stackoverflow.com, тэг [win32] приведет вас к [winapi].
Не удаляйте его, вы используете Windows API.
Ответ 2
Документация для предопределенных макросов гласит:
_WIN32: Определено для приложений для Win32 и Win64. Всегда определяется.
_WIN64: Определено для приложений для Win64.
Значит, не только _WIN32
всегда должен быть определен, он не вызывает никаких проблем в 64-битных приложениях. Поэтому я бы посоветовал вам не удалять его.
Ответ 3
Вы не должны указывать ни один из них.
Компилятор определит их соответствующим образом.
Ответ 4
_WIN32: Определяется для приложений для Win32 и Win64. Всегда определяется.
_WIN64: Определено для приложений для Win64.
Подробнее: Предопределенные макросы.
Проще говоря, WIN32/_WIN32 используется, чтобы указать, используете ли вы Windows (для скрещивания системного приложения), в то время как _WIN64 используется, чтобы сообщить, что среда компиляции - x86 или x64.
Если вы хотите узнать, работает ли ваше приложение под Windows x64, вы должны использовать Windows API IsWow64Process.