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


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

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

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

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

#define

Скомпилированная версия

Пример

_UNICODE

Юникод (расширенные символы)

_tcsrev сопоставляется функции _wcsrev

_MBCS

Многобайтовая кодировка

_tcsrev сопоставляется функции _mbsrev

Нет (по умолчанию: не определена ни _UNICODE, ни _MBCS)

SBCS (ASCII)

_tcsrev сопоставляется с strrev

Например, определенная в файле TCHAR.H универсальная текстовая функция _tcsrev сопоставляется функции 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 для сопоставления моделям MBCS, Unicode и SBCS.

_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);

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

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

См. также

Ссылки

Универсальные текстовые сопоставления

Сопоставления типов данных

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

Сопоставления процедур

Пример программы, использующей обычный текст