Символ UNICODE
влияет на объявления в заголовках Windows API (в основном <windows.h>
), в то время как символы _UNICODE
и _MBCS
влияют на объявления в библиотеке C.
Пример Windows API: с UNICODE
определено MessageBox
отображается на MessageBoxW
, в терминологии Windows Unicode версия , в то время как с UNICODE
undefined MessageBox
отображается на MessageBoxA
, Версия ANSI .
Пример библиотеки C более сложный.
Несмотря на два символа _UNICODE
и _MBCS
, различаются только три случая:
Ни один из них не определен, и, например, _tcslen
отображается на strlen
, версия для узких символов .
_MBCS
определено и _UNICODE
не определено, и, например, _tcsclen
отображается на _mbslen
, версия многобайтовых символов .
_UNICODE
определено и _MBCS
не определено, и, например, _tcslen
отображается на wcslen
, версия для широких символов .
Стоит отметить, что все это было в поддержке Windows 9x, у которой не было API для широких символов.
Однако в 2001 году Microsoft представила Layer для Unicode , который, по сути, предоставил API для широких символов для Windows 9x. При этом вся вышеприведенная схема была устаревшей, за исключением одного случая - использования MFC в качестве DLL в Windows 9x и невозможности или нежелания ее перестраивать. Ну, кроме того, что тот, кто поддерживает генерацию кода в Visual Studio, начиная с версии 11, еще не осознал этого факта десять лет назад, и это, в свою очередь, вводит в заблуждение орды новичков, которые тогда, как профессионалы, серьезно не желают прекращать использовать эта непроизводительная трата времени.
Приветствия и hth.,