Mapeamentos de texto genéricos em Tchar.h
Para simplificar ao transporte/s de código para o uso internacional, a biblioteca de tempo de execução de Microsoft fornece Microsoftmapeamentos específico de genérico- de texto para muitos tipos de dados, rotinas, e outros objetos. Você pode usar esses mapeamentos, que são definidos em Tchar.h, para escrever o código genérico que pode ser compilado para o byte único, o multibyte, ou conjuntos de caracteres de Unicode , como uma constante manifesta que você definiu usando uma instrução de #define . Os mapeamentos de Genérico- texto são as extensões de Microsoft que não são ANSI compatível.
Usando o Tchar.h, você pode compilar o byte único, o conjunto de caracteres de vários bytes (MBCS), e os aplicativos de Unicode das mesmas fontes. Tchar.h define as macros (que têm o prefixo _tcs) que, com as definições corretas de pré-processador, o mapa a str, _mbs, ou funções de wcs , conforme apropriado. Para criar um MBCS, defina o símbolo _MBCS. Para criar Unicode, defina o símbolo _UNICODE. Para criar um aplicativo de byte único, não define nenhum (o padrão). Por padrão, _MBCS é definido para aplicativos de MFC.
O tipo de dados de _TCHAR é definido em Tchar.h condicional. Se o símbolo _UNICODE é definido para sua compilação, _TCHAR está definido como wchar_t; caso contrário, como byte único e construções de MBCS, é definido como char. (wchar_t, o tipo de dados básico de ampla caractere Unicode, é a contraparte de 16 bits a charcom sinal de 8 bits.) Para aplicativos internacionais, use a família de _tcs de funções, que operam em unidades de _TCHAR , não em bytes. Por exemplo, _tcsncpy copia n _TCHARs, não em bytes de n .
Como algumas funções de cadeia de caracteres- manipulação de dados (SBCS) do conjunto de caracteres de um byte obtêm parâmetros (assinado) de char* , resultados de aviso de um compilador de incompatibilidade quando _MBCS está definido. Há três maneiras de evitar esse aviso:
Use os thunks tipo seguro da função embutida em Tchar.h. Este é o comportamento padrão.
Use as macros diretos em Tchar.h definindo _MB_MAP_DIRECT na linha de comando. Se você fizer isso, você deve corresponder manualmente tipos. Esse é o método mais rápido, mas não é do tipo seguro.
Use os thunks estaticamente vinculados tipo seguro da função de biblioteca em Tchar.h. Para fazer isso, defina _NO_INLINING constante na linha de comando. Esse é o método mais lento, mas o tipo mais segura.
Políticas de pré-processador para mapeamentos de Genérico- texto
# define |
Versão compilada |
Exemplo |
---|---|---|
_UNICODE |
Unicode (ampla caractere) |
mapas de_tcsrev a _wcsrev |
_MBCS |
Multibyte-caractere |
mapas de_tcsrev a _mbsrev |
Nenhum (a opção tem _UNICODE nem nem _MBCS definiu) |
SBCS (ASCII) |
mapas de_tcsrev a strrev |
Por exemplo, a função _tcsrevde genérico- texto, que é definida em Tchar.h, mapeia a _mbsrev se você definiu _MBCS em seu programa, ou a _wcsrev se você definiu _UNICODE. Do contrário, _tcsrev é mapeado para strrev. Outros mapeamentos de tipo de dados são fornecidos em Tchar.h para conveniência de programação, mas _TCHAR é muito útil.
Mapeamentos de tipo de dados de Genérico- texto
Genérico-texto Nome do tipo de dados |
_UNICODE & _MBCS Não definido |
_MBCS 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 |
_T ou _TEXT |
Nenhum efeito (cancelado por pré-processador) |
Nenhum efeito (cancelado por pré-processador) |
L (seguir converte o caractere ou cadeia de caracteres a suas contrapartes de Unicode ) |
Para obter uma lista de mapeamentos de genérico- texto rotinas, variáveis, e outros objetos, consulte Mapeamentos de texto genérico na referência da biblioteca de tempo de execução.
Dica
Não use a família de str das funções com cadeias de caracteres Unicode, que provavelmente conter bytes nulos inseridos.De maneira semelhante, não use a família de wcs das funções com cadeias de caracteres de MBCS SBCS (ou).
Estes fragmentos de código a seguir ilustram o uso de _TCHAR e de _tcsrev para mapear para o MBCS, a Unicode, e a modelos de SBCS.
_TCHAR *RetVal, *szString;
RetVal = _tcsrev(szString);
Se _MBCS foi definido, o pré-processador mapeia esse fragmento a esse código:
char *RetVal, *szString;
RetVal = _mbsrev(szString);
Se _UNICODE foi definido, o pré-processador mapeia esse fragmento a esse código:
wchar_t *RetVal, *szString;
RetVal = _wcsrev(szString);
Se nem nem _MBCS_UNICODE foram definidas, o pré-processador mapeia o fragmento ao código de ASCII de byte único, como segue:
char *RetVal, *szString;
RetVal = strrev(szString);
Em virtude disso, você pode escrever, manter, e criar um arquivo de código de uma única fonte para executar com rotinas que são específicas a qualquer um dos três tipos de conjuntos de caracteres.