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