Должен ли я определить _WIN32 и _WIN64 в 64-битной сборке? - PullRequest
22 голосов
/ 13 июля 2011

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

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

Ответы [ 4 ]

54 голосов
/ 13 июля 2011

_WIN32 не означает, что вы думаете, что делает. Это означает «я использую Windows API». Постфикс 32 был добавлен еще во времена Windows NT 3.1, чтобы отличать его от 16-разрядного API, который использовался в Windows версии 3. Этот термин потерял популярность из-за проблемы разрядности. Вы можете увидеть это на stackoverflow.com, тег [win32] приведет вас к [winapi].

Не удаляйте его, вы используете Windows API.

36 голосов
/ 13 июля 2011

Документация для предопределенных макросов гласит:

_WIN32: Определено для приложений для Win32 и Win64.Всегда определено.

_WIN64: Определено для приложений для Win64.

Так что не только _WIN32 всегда должно быть определено, этоне вызывает никаких проблем в 64-битных приложениях.Поэтому я бы посоветовал вам не удалять его.

8 голосов
/ 13 июля 2011

Вы никогда не должны определять ни один из них.

Компилятор определит их соответствующим образом.

3 голосов
/ 20 апреля 2017

_WIN32 : Определено для приложений для Win32 и Win64.Всегда определено.

_WIN64 : Определено для приложений для Win64.

Подробнее: Предопределенные макросы .

Проще говоря, WIN32/ _WIN32 используется для определения того, используете ли вы Windows (для пересечения системного приложения), а _WIN64 используется для указания того, что среда компиляции - x86 или x64.

Если вы хотите узнать, работает ли ваше приложение под Windowsx64, вы должны использовать Windows API IsWow64Process .

...