Mapeamentos de texto genérico no Tchar.h
Para simplificar o transporte de código para uso internacional, o Microsoft biblioteca de tempo de execução fornece Microsoft-mapeamentos de texto genérico específicos 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 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 as extensões que não são ANSI compatível.
Usando o Tchar.h, você pode construir um byte, conjunto de caracteres a Multibyte (MBCS) e Unicode aplicativos de fontes mesmo. TCHAR.h define macros (que possuem 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 _MBCS. Para criar Unicode, defina o símbolo _UNICODE. Para criar um aplicativo de byte único, defina nenhuma (padrão). Por padrão, _MBCS está definido para todos os aplicativos MFC.
O _TCHAR o tipo de dados está definido condicionalmente em Tchar.h. Se o símbolo _UNICODE está definido para a sua criaçã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 família de funções, que operam em _TCHAR unidades, em bytes. Por exemplo, _tcsncpy cópias n _TCHARs, e não n bytes.
Porque alguns tratamentos de seqüência de caracteres do conjunto de caracteres de Byte único (SBCS) funciona take (assinado) char* parâmetros, um resulta de aviso de compilador de incompatibilidade de tipo quando _MBCS está definido. Há três maneiras de evitar este aviso:
Use Tchar.h thunks de função embutida de tipo seguro. This is the default behavior.
Utilizar as macros de direct definindo Tchar.h _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 é um tipo seguro.
Use os thunks da função de biblioteca de tipo seguro vinculadas estaticamente em Tchar.h. Para fazer isso, defina a constante _NO_INLINING na linha de comando. Este é o método mais lento, mas mais fortemente tipadas.
Diretivas de pré-processamento para mapeamentos de texto genérico
# define |
Versão compilada |
Example |
---|---|---|
_UNICODE |
Unicode(caractere largo) |
_tcsrevmapeia para_wcsrev |
_MBCS |
Caracteres multibyte |
_tcsrevmapeia para_mbsrev |
Nenhum (o padrão não tem _UNICODE nem _MBCS definido) |
SBCS (ASCII) |
_tcsrevmapeia parastrrev |
Por exemplo, a função de texto genérico _tcsrev, que é definido em Tchar.h, mapeia para _mbsrev se você tiver definido _MBCS no seu programa, ou para _wcsrev se você tiver definido _UNICODE. Caso contrário, _tcsrev mapeia para strrev. Outros mapeamentos de tipo de dados são fornecidos Tchar.h para a conveniência de programação, mas _TCHAR é mais útil.
Mapeamentos de tipo de dados de texto genérico
Texto genérico Nome do tipo de dados |
_ Unicode & _ MBCS do arquivo não definido |
_ MBCS DO ARQUIVO Definido |
_ UNICODE Definido |
---|---|---|---|
_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 |
Nenhum efeito (removido pelo pré-processador) |
Nenhum efeito (removido pelo pré-processador) |
L(converte o caractere seguinte ou a seqüência de caracteres para seu Unicode contraparte) |
Para obter uma lista de mapeamentos de texto genérico de rotinas, variáveis e outros objetos, consulte Generic-Text Mappings na referência de biblioteca de tempo de execução.
Observação |
---|
Não use o str família de funções com seqüências de caracteres Unicode, que provavelmente contêm bytes nulos incorporados. 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 e _tcsrev para mapear MBCS, Unicodee modelos SBCS.
_TCHAR *RetVal, *szString;
RetVal = _tcsrev(szString);
Se _MBCS foi definido, o pré-processador mapeia esse fragmento para este código:
char *RetVal, *szString;
RetVal = _mbsrev(szString);
Se _UNICODE foi 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 de código, da seguinte maneira:
char *RetVal, *szString;
RetVal = strrev(szString);
Portanto, você pode escrever, manter e compilar um arquivo de código-fonte do único para executar com rotinas que são específicas para qualquer um dos três tipos de conjuntos de caracteres.
Consulte também
Conceitos
Conjuntos de caracteres em C++
Usando TCHAR.Tipos de dados de h com _ MBCS do arquivo de código