Подтвердить что ты не робот

Должен ли я определять как _WIN32, так и _WIN64 в 64-битной сборке?

Когда мы добавляем 64-битную конфигурацию из уже существующего 32-битного проекта, Visual Studio копирует 32-битные конфигурации по умолчанию. VS даже копирует _WIN32
Все мои 64-битные проекты также определяют _WIN32, несмотря на то, что они (64-битные PE) никогда не могут работать на 32-битной Windows. Мне это очень неудобно.

Я хочу удалить _WIN32, если у него нет проблем. Я не уверен в этом.
Это нормально, если я удалю определение _WIN32?

4b9b3361

Ответ 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.