Compartilhar via


Mapeamentos de texto genérico em Tchar.h

Para simplificar o transporte do código para uso internacional, o Microsoft a biblioteca de tempo de execução fornece Microsoft-mapeamentos de texto genérico específicas para muitos tipos de dados, rotinas e outros objetos.Você pode usar esses mapeamentos, que são definidos no Tchar.h para gravar código genérico que pode ser compilado para um byte, multibyte, ou Unicode caracteres conjuntos dependendo de uma constante de manifesto que você definir usando um #define instrução.Texto genérico mapeamentos são Microsoft extensões não são ANSI compatível.

Usando o Tchar.h, você pode criar um conjunto de caracteres a Multibyte (MBCS) byte, e Unicode aplicativos de fontes mesmos.TCHAR.h define macros (que tem o prefixo _tcs) que, com as definições de pré-processador corretas, mapear para str, _mbs, ou wcs funções, conforme apropriado.Para construir MBCS, definir o símbolo de _MBCS.Criar Unicode, definir o símbolo de _UNICODE.Para criar um aplicativo de byte único, defina nenhuma (padrão).Por padrão, _MBCS está definido para aplicativos MFC.

O _TCHAR tipo de dados é definido de condicionalmente em Tchar.h.Se o símbolo de _UNICODE está definido para compilação, _TCHAR é definido como wchar_t; Caso contrário, para um byte e compilações MBCS, ele é definido como char.(wchar_t, o tipo de dados de caracteres largos Unicode básico, é a contraparte de 16 bits para um 8 bits assinado char.) Para aplicativos internacionais, use o _tcs da família de funções, que operam em _TCHAR unidades, não em bytes.For example, _tcsncpy copies n_TCHARs, not n bytes.

Porque alguns tratamentos de seqüência de caracteres conjunto de caracteres de Byte único (SBCS) funções levar (assinado) char* parâmetros, um resultados de aviso do compilador de incompatibilidade tipo quando _MBCS está definido.Há três maneiras para evitar este aviso:

  1. Use Tchar.h thunks de função in-line de tipo seguro.Este é o comportamento padrão.

  2. Usar as macros diretas em Tchar.h, definindo _MB_MAP_DIRECT na linha de comando.Se você fizer isso, você deve corresponder manualmente tipos.É o método mais rápido, mas não é tipo seguro.

  3. Use os thunks de função de biblioteca de tipo seguro estaticamente vinculadas no Tchar.h.Para fazer isso, definir a constante _NO_INLINING na linha de comando.Este é o método mais lento, mas mais tipo seguro.

Diretivas de pré-processamento para mapeamentos de texto genérico

# define

Versão compilada

Exemplo

_UNICODE

Unicode(caractere largo)

_tcsrevmapas para_wcsrev

_MBCS

Caracteres de multibyte

_tcsrevmapas para_mbsrev

None (o padrão não tem _UNICODE nem _MBCS definido)

SBCS (ASCII)

_tcsrevmapas parastrrev

Por exemplo, a função texto genérico _tcsrev, que é definido em Tchar.h, mapeia para _mbsrev se você tiver definido _MBCS no seu programa ou a _wcsrev se você tiver definido _UNICODE.Otherwise, _tcsrev maps to strrev.Outros mapeamentos de tipo de dados Tchar.h são fornecidos para conveniência de programação, mas _TCHAR é mais útil.

Mapeamentos de tipo de dados de texto genérico

Texto genérico

Nome de tipo de dados

Unicode &

MBCS do arquivo não definido

MBCS DO ARQUIVO

Definidos

UNICODE

Definidos

_TCHAR

char

char

wchar_t

_TINT

int

unsigned int

wint_t

_TSCHAR

signed char

signed char

wchar_t

_TUCHAR

unsigned char

unsigned char

wchar_t

_TXCHAR

char

unsigned char

wchar_t

_Tou_TEXT

Efeito (removido pelo pré-processador)

Efeito (removido pelo pré-processador)

L(converte o caractere ou seqüência de caracteres a seguir seu Unicode correspondente)

Para obter uma lista de mapeamentos de texto genérico de rotinas, variáveis e outros objetos, consulte Mapeamentos de texto genérico na referência de biblioteca de tempo de execução.

ObservaçãoObservação

Não use o str família de funções com cadeias de caracteres Unicode, que provavelmente contêm incorporado bytes nulos.Da mesma forma, não use o wcs da família de funções com strings MBCS (ou SBCS).

Os fragmentos de código a seguir ilustram o uso de _TCHAR e _tcsrev para mapear MBCS, Unicodee modelos SBCS.

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

Se _MBCS tiver sido definido, o pré-processador mapeia esse fragmento para este código:

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

Se _UNICODE tiver sido definido, o pré-processador mapeia esse fragmento para este código:

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

Se nenhuma das _MBCS nem _UNICODE ter sido definido, o pré-processador mapeia o fragmento de byte único ASCII código da seguinte maneira:

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

Portanto, você pode gravar, manter e compilar um arquivo de código-fonte única para executar com rotinas que são específicas para qualquer um dos três tipos de conjuntos de caracteres.

Consulte também

Conceitos

Texto e Strings em Visual C++

Usando TCHAR.H tipos de dados com código MBCS do arquivo