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

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

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

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

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

Например, определенная в файле TCHAR.H универсальная текстовая функция _tcsrev сопоставляется с функцией mbsrev, если в программе определена константа MBCS, или с функцией _wcsrev, если определена константа _UNICODE. В противном случае _tcsrev сопоставляется с strrev.

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

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

Имя универсального текстового типа данных Однобайтовая кодировка (_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);

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

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

См. также

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