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:
Use Tchar.h thunks de função in-line de tipo seguro.Este é o comportamento padrão.
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.
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çã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.