Почему и UNICODE, и UNICODE?
Я смотрю на командную строку, сгенерированную Visual Studio, и для одного из моих проектов он определяет два символа: _UNICODE
и UNICODE
. Теперь, если я понимаю этот документ этот довольно старый документ, символ _UNICODE
- это вещь VС++, которая заставляет некоторые стандартные функции использовать wchar_t
вместо этого of char
в своих интерфейсах.
Но что означает UNICODE
без подчеркивания?
Ответы
Ответ 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.