Поделиться через


Использование универсальных текстовых сопоставлений

Блок, относящийся только к системам Майкрософт

Чтобы упростить написание кода для разных международных рынков, в библиотеке времени выполнения Microsoft имеются специфичные для Microsoft "универсальные текстовые" сопоставления для многих типов данных, подпрограмм и других объектов. Эти сопоставления определены в TCHAR.H. Данные сопоставления имен можно использовать для написания универсального кода, который можно компилировать в любом из трех типов наборов символов (ASCII (однобайтовая кодировка), многобайтовая кодировка или Юникод), в зависимости от константы манифеста, указанной с помощью оператора #define. Универсальные текстовые сопоставления — это расширения Майкрософт, несовместимые с ANSI.

Директивы препроцессора для сопоставлений универсального текста

#define Скомпилированная версия Пример
_UNICODE Юникод (расширенные символы) _tcsrev соответствует _wcsrev
_MBCS Многобайтовые символы _tcsrev соответствует _mbsrev
Нет (значение по умолчанию: оба _UNICODE и _MBCS не определено) Однобайтовая кодировка (ASCII) _tcsrev соответствует strrev

Например, функция универсального текста _tcsrev, определенная в TCHAR.H, сопоставляется с _mbsrev тем, определена ли _MBCS она в программе или _wcsrev_UNICODE если она определена. В противном случае _tcsrev сопоставляется с strrev.

Тип _TCHARданных универсального текста, также определенный в TCHAR.H, сопоставляется с типом char , если _MBCS определен, типом wchar_t , если _UNICODE определен, и типом char , если ни константы не определены. Другие сопоставления типов данных предоставляются TCHAR.H для удобства программирования, но _TCHAR это наиболее полезный тип.

Сопоставления типов данных универсального текста

Имя универсального текстового типа данных SBCS (_UNICODEне _MBCS определено) _MBCS Определенные _UNICODE Определенные
_TCHAR char char wchar_t
_TINT int int wint_t
_TSCHAR signed char signed char wchar_t
_TUCHAR unsigned char unsigned char wchar_t
_TXCHAR char unsigned char wchar_t
_T или _TEXT Не действует (удаляется препроцессором) Не действует (удаляется препроцессором) L (преобразует следующий символ или строку в аналог в Юникоде)

Полный список универсальных текстовых сопоставлений подпрограмм, переменных и других объектов см . в сопоставлениях универсального текста.

В следующих примерах кода показано использование функций _TCHAR и _tcsrev для сопоставления моделям многобайтовой кодировки, Юникод и однобайтовой кодировки.

_TCHAR *RetVal, *szString;
RetVal = _tcsrev(szString);

Если указано _MBCS, препроцессор сопоставляет предыдущий фрагмент следующему коду:

char *RetVal, *szString;
RetVal = _mbsrev(szString);

Если указано _UNICODE, препроцессор сопоставляет тот же фрагмент следующему коду:

wchar_t *RetVal, *szString;
RetVal = _wcsrev(szString);

_MBCS Если оба и _UNICODE не определены, препроцессор сопоставляет фрагмент с кодом ASCII с одним байтом, как показано ниже.

char *RetVal, *szString;
RetVal = strrev(szString);

Эти макросы позволяют создавать, поддерживать и компилировать один файл исходного кода с помощью подпрограмм, относящихся ко всем трем типам наборов символов.

Завершение блока, относящегося только к системам Майкрософт

См. также

Сопоставления универсального текста
Сопоставления типов данных
Сопоставления констант и глобальных переменных
Сопоставления подпрограмм
Пример универсальной текстовой программы