Compartilhar via


Mapeamentos de texto genérica na tchar.h

Para simplificar transportar código para uso internacional, a biblioteca de time de execução Microsoft fornece mapeamentos de texto genérica específicas da Microsoft para muitos tipos de dados, rotinas e outros objetos.Você pode usar esses mapeamentos, que são definidos no tchar.h, escrever um código genérico que pode ser compilado por byte único, multibyte, ou Unicode, dependendo de uma constante de manifesto que definir usando um #define demonstrativo. Texto genérico mapeamentos são extensões da Microsoft que não sejam ANSI compatível.

Usando o tchar.h, você pode compilação Unicode de um byte e MBCS aplicativos a partir de fontes mesmos.Tchar.h define o prefixo macros**_tcs**, que, com sistema autônomo definições de pré-processador corretas, mapear o STR, _mbs, or WCS função conforme apropriado.Para compilação MBCS, defina o símbolo _MBCS.Para compilação Unicode, defina o símbolo _UNICODE.Para criar um aplicativo de byte único, defina nenhuma (padrão).Por padrão, _MBCS está definido para aplicativos MFC.

The _TCHAR tipo de dados é definido condicionalmente em tchar.h.Se o símbolo _UNICODE definido para a compilação, _TCHAR definido sistema autônomo wchar_t; Caso contrário, para um byte e compilações MBCS, ele é definido sistema autônomo char. (wchar_t, o tipo de dados de caractere largos Unicode básico, é a contraparte 16 bit um assinado de 8-bit char.) Para aplicativos internacionais, use o _tcs família de funções, que operam em _TCHAR unidades, não bytes.For example, _tcsncpy copies n _TCHARs, not n bytes.

Porque a algumas funções de manipulação de seqüência de caracteres SBCS (assinado) char * parâmetros, um tipo de incompatibilidade de compilador aviso resultados quando _MBCS é definida.Há três maneiras de evitar esse aviso, listados em ordem de eficiência:

  1. Use os thunks de função in-line seguros tchar.h.Esse é 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 tipos manualmente.Isso é o método mais rápido, mas não é fortemente tipado.

  3. Use as biblioteca vinculada estaticamente fortemente tipado função thunks tchar.h.Para fazer isso, defina a constante _NO_INLINING na linha de comando.Este é o método mais lento, mas a maioria dos tipos seguros.

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

# define

Versão compilada

Exemplo

_UNICODE

Unicode (caractere largo)

_tcsrev mapeia para _wcsrev

_MBCS

caractere multibyte

_tcsrev mapeia para _mbsrev

Nenhum (padrão: Nenhuma das _UNICODE nor _MBCS definido)

SBCS (ASCII)

_tcsrev mapeia para strrev

Por exemplo, a função de texto genérica _tcsrev, definido no tchar.h, mapas para _mbsrev Se você tiver definido _MBCS no seu programa ou para _wcsrev se você definiu _UNICODE.Caso contrário, _tcsrev mapeia para strrev.Outros mapeamentos de tipo de dados tchar.h são fornecidos para sua conveniência, mas de programação**_TCHAR** é mais útil.

Mapeamentos de tipo de dados de texto genérica

Texto genérico

Nome do tipo de dados

_UNICODE &

_MBCS não definido

_MBCS

Definido

_UNICODE

Definido

_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 or _TEXT

Nenhum efeito (removido pré-processador)

Nenhum efeito (removido pré-processador)

L (converte após o caractere ou seqüência de caracteres à sua contraparte Unicode)

Para obter uma lista completa de texto genérica mapeamentos de rotinas, variáveis e outros objetos, consulte Mapeamentos de texto genérica in the Referência da biblioteca de time de execução.

Observação:

Não use o str família de funções com as cadeias de caracteres Unicode, que possam conter incorporado bytes nulo. Da mesma forma, não use o WCS família de funções com strings MBCS (ou SBCS).

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

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

If _MBCS tiver sido definida, o pré-processador mapeia esse fragmento para o código:

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

If _UNICODE tiver sido definida, o pré-processador mapeia esse fragmento para o código:

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

Se nenhuma das _MBCS nor _UNICODE tiver sido definida, o pré-processador mapeia o fragmento de código ASCII de byte único:

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

Assim, você pode escrever, 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 caractere.

Consulte também

Conceitos

Conjuntos de caractere em C++

Usar tipos de dados TCHAR.H com código _MBCS