Я знаю, що WIN32
позначає компіляцію win32, але для чого _WIN32
використовується?
Я знаю, що WIN32
позначає компіляцію win32, але для чого _WIN32
використовується?
Відповіді:
WIN32
це ім’я, яке ви можете використовувати і навіть визначити у власному коді, що може суперечити використанню корпорацією Майкрософт. _WIN32
- це ім’я, яке зарезервовано для реалізатора (в даному випадку Microsoft), оскільки воно починається з підкреслення та великої літери - вам не дозволяється визначати зарезервовані імена у власному коді, тому не може бути зіткнення.
#ifdef
і #define
. _WIN32
призначений для використання будь-яким програмуванням у контексті #ifdef
.
Для детального пояснення (Ніл Баттерворт та blue.tuxedo вже дали правильну відповідь):
WIN32
визначається SDK або середовищем побудови, тому він не використовує зарезервований простір імен реалізації_WIN32
визначається компілятором, тому він використовує підкреслення, щоб розмістити його у просторі імен, зарезервованому для реалізаціїВи знайдете аналогічний набір подвійних Визначає з майже однаковими назвами та аналогічними цілями , такі як _UNICODE
/ UNICODE
, _DEBUG
/ DEBUG
, або , може бути , _DLL
/ DLL
(я думаю , що тільки ті , UNICODE отримують більшу частину будь-якого використання в їх різних версіях). Хоча іноді в цих випадках (як _UNICODE
), замість версії підкреслення визначається з допомогою компілятора, вони використовуються для управління , що роблять заголовки CRT:
_UNICODE
повідомляє заголовки ЕПТ, що імена ЕПТ можуть бути як Unicode, так і ANSI (наприклад, _tcslen()
мають відображати широкий варіант символів ( wcslen()
)UNICODE
робить щось подібне для SDK (пов'язує API " W
" Win32 з їх варіантами)По суті, версії з підкресленням контролюються або використовуються командою компілятора, версії без підкреслення контролюються / використовуються командами поза компілятором. Звичайно, мабуть, буде багато перекриттів через сумісність із попередніми версіями та просто загальні помилки однієї чи іншої команди.
Я вважаю це заплутаним як пекло - і виявляю, що вони використовуються майже взаємозамінно в коді користувача (зазвичай, коли ви бачите один визначений, ви побачите інший, визначений там же, тому що якщо вам потрібен один, вам потрібен інший). Особисто я вважаю, що вам слід використовувати версії без підкреслення (якщо ви не пишете час роботи компілятора) і переконайтесь, що вони обидва визначаються (чи через слухачі, чи за допомогою комутаторів компілятора), коли ви визначаєте їх.
Зверніть увагу, що SDK визначає _WIN32
при створенні для Mac, оскільки компілятор цього не робить, перевищуючи свої межі. Я не впевнений, у яких проектах використовується Win32 API і компілятор, орієнтований на Mac - можливо, якась версія Office для Max або щось інше.
WIN32 - це визначений користувачем прапор, який може знадобитися деяким заголовкам. _WIN32 автоматично визначається візуальним компілятором C / C ++. Оскільки він починається з символу _, за яким слідує символ великої літери, він зарезервований реалізацією (мається на увазі постачальник набору інструментів C / C ++).
Я вважаю за краще використовувати (читати) _WIN32, мені здається безпечнішим.