Compartilhar via


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:

  1. Use os thunks tipo seguro da função embutida em Tchar.h. Este é o comportamento padrão.

  2. 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.

  3. 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.

Consulte também

Conceitos

Texto e cadeias de caracteres no Visual C++

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