Почему и Юникод и Юникод? - PullRequest
36 голосов
/ 31 октября 2011

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

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

Ответы [ 3 ]

47 голосов
/ 31 октября 2011

Рэймонд Чен объясняет это здесь: Текст против _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
14 голосов
/ 31 октября 2011

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

11 голосов
/ 14 августа 2012

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

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

тогда

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...