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

Почему и UNICODE, и UNICODE?

Я смотрю на командную строку, сгенерированную Visual Studio, и для одного из моих проектов он определяет два символа: _UNICODE и UNICODE. Теперь, если я понимаю этот документ этот довольно старый документ, символ _UNICODE - это вещь VС++, которая заставляет некоторые стандартные функции использовать wchar_t вместо этого of char в своих интерфейсах.

Но что означает UNICODE без подчеркивания?

4b9b3361

Ответ 1

Раймонд Чен объясняет это здесь: ТЕКСТ vs. _TEXT против _T и UNICODE против _UNICODE:

Простые версии без подчеркивания влияют на набор символов, который обрабатывает файлы заголовков Windows по умолчанию. Итак, если вы определяете UNICODE, то GetWindowText будет отображаться, например, на GetWindowTextW вместо GetWindowTextA. Аналогично, макрос TEXT будет отображаться в L"..." вместо "...".

Версии с подчеркиванием влияют на набор символов, который обрабатывает файлы заголовков времени выполнения C по умолчанию. Итак, если вы определяете _UNICODE, то _tcslen будет отображаться, например, на wcslen вместо strlen. Аналогично, макрос _TEXT будет отображаться в L"..." вместо "...".

В Windows SDK вы найдете такие вещи:

#ifdef _UNICODE
#ifndef UNICODE
#define UNICODE
#endif
#endif

Ответ 2

Поставщики компиляторов должны префиксные идентификаторы в своих заголовочных файлах с помощью подчеркивания, чтобы они не сталкивались с вашими идентификаторами. Итак, <tchar.h>, заголовочный файл компилятора, использует _UNICODE. Файлы заголовков Windows SDK являются компромиссом агностиком, а старый камень - старым, он использует UNICODE без подчеркивания. Вы должны определить оба.

Ответ 3

В двух словах,

UNICODE используется заголовками Windows,

тогда

_UNICODE используется заголовками C-runtime/MFC.