Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Para simplificar o transporte de código para uso internacional, a biblioteca de tempo de execução da Microsoft fornece mapeamentos de texto genérico específicos da Microsoft para muitos tipos de dados, rotinas e outros objetos. Você pode usar esses mapeamentos, que são definidos em tchar.h, para escrever código genérico que pode ser compilado para conjuntos de caracteres de byte único, multibyte ou Unicode, dependendo de uma constante de manifesto que você deve definir usando a instrução #define. Mapeamentos de texto genérico são extensões da Microsoft que não são compatíveis com ANSI.
Usando o tchar.h, pode construir aplicações de byte único, de Conjunto de Caracteres Multibyte (MBCS) e Unicode a partir das mesmas fontes. tchar.h define macros (que têm o prefixo _tcs) que, com as definições do pré-processador adequadas, mapeiam para str, _mbs ou wcs funções, conforme apropriado. Para criar o MBCS, defina o símbolo _MBCS. Para criar Unicode, defina o símbolo _UNICODE. Para criar um aplicativo de byte único, não defina nenhum dos dois (o padrão). Por padrão, _UNICODE é definido para aplicativos MFC.
O _TCHAR tipo de dados é definido condicionalmente em tchar.h. Se o símbolo _UNICODE é definido para sua compilação, _TCHAR é definido como wchar_t; caso contrário, para compilações de byte único e 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 signed char.) Para aplicações internacionais, use a família de funções _tcs, que operam em unidades de _TCHAR, não em bytes. Por exemplo, _tcsncpy copia n_TCHARs, não n bytes.
Como algumas funções de manipulação de cadeia de caracteres SBCS (Single Byte Character set) usam parâmetros (assinados), char* um aviso de compilador de incompatibilidade de tipo resulta quando _MBCS é definido. Há três maneiras de evitar esse aviso:
Utilize as funções inline seguras de tipo (type-safe) em tchar.h. Este é o comportamento padrão.
Utilize as macros diretas em tchar.h definindo
_MB_MAP_DIRECTna linha de comando. Se fizeres isso, tens de corresponder manualmente os tipos. Este é o método mais rápido, mas não é tipo seguro.Use a função de biblioteca vinculada estaticamente segura para tipos thunks em tchar.h. Para fazer isso, defina a constante
_NO_INLININGna linha de comando. Este é o método mais lento, mas o mais seguro para tipos.
Diretivas de pré-processador para mapeamentos de Generic-Text
| # definir | Versão compilada | Exemplo |
|---|---|---|
_UNICODE |
Unicode (caractere largo) |
_tcsrev mapeia para _wcsrev |
_MBCS |
Caractere multibyte |
_tcsrev mapeia para _mbsrev |
Nenhum (o padrão não tem nem _UNICODE nem _MBCS definido) |
SBCS (ASCII) |
_tcsrev mapeia para strrev |
Por exemplo, a função _tcsrevde texto genérico , que é definida em tchar.h, mapeia para _mbsrev se você definiu _MBCS em seu programa, ou para _wcsrev se você definiu _UNICODE. Caso contrário, _tcsrev mapeia para strrev. Outros mapeamentos de tipo de dados são fornecidos em tchar.h para conveniência de programação, mas _TCHAR é o mais útil.
Mapeamentos de tipo de dados Generic-Text
| Generic-Text 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 |
Sem efeito (removido pelo pré-processador) | Sem efeito (removido pelo pré-processador) |
L (converte o seguinte caractere ou cadeia de caracteres em sua contraparte Unicode) |
Para obter uma lista de mapeamentos de texto genérico de rotinas, variáveis e outros objetos, consulte MapeamentosGeneric-Text na Referência da Biblioteca Run-Time.
Observação
Não use a str família de funções com cadeias de caracteres Unicode, que provavelmente conterão bytes nulos incorporados. Da mesma forma, não use a wcs família de funções com cadeias de caracteres MBCS (ou SBCS).
Os fragmentos de código a seguir ilustram o uso de _TCHAR e _tcsrev para mapeamento para os modelos MBCS, Unicode e SBCS.
_TCHAR *RetVal, *szString;
RetVal = _tcsrev(szString);
Se _MBCS tiver sido definido, o pré-processador mapeia este fragmento para este código:
char *RetVal, *szString;
RetVal = _mbsrev(szString);
Se _UNICODE tiver sido definido, o pré-processador mapeia este fragmento para este código:
wchar_t *RetVal, *szString;
RetVal = _wcsrev(szString);
Se nem _MBCS nem _UNICODE tiverem sido definidos, o pré-processador mapeia o fragmento para o código ASCII de byte único, da seguinte forma:
char *RetVal, *szString;
RetVal = strrev(szString);
Portanto, você pode escrever, manter e compilar um arquivo de código-fonte único para ser executado com rotinas específicas para qualquer um dos três tipos de conjuntos de caracteres.
Ver também
Texto e cadeias de caracteres
Usando tipos de dados do TCHAR.H com código _MBCS