Использование универсальных текстовых сопоставлений
Блок, относящийся только к системам Майкрософт
Чтобы упростить написание кода для разных международных рынков, в библиотеке времени выполнения 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);
Эти макросы позволяют создавать, поддерживать и компилировать один файл исходного кода с помощью подпрограмм, относящихся ко всем трем типам наборов символов.
Завершение блока, относящегося только к системам Майкрософт
См. также
Сопоставления универсального текста
Сопоставления типов данных
Сопоставления констант и глобальных переменных
Сопоставления подпрограмм
Пример универсальной текстовой программы