Usando mapeamentos de texto genérico

Seção específica da Microsoft

Para simplificar o desenvolvimento de código para vários mercados internacionais, a biblioteca de tempo de execução da Microsoft fornece mapeamentos de "texto genérico" específico da Microsoft para vários tipos de dados, rotinas e outros objetos. Esses mapeamentos são definidos em TCHAR. H. Você pode usar esses mapeamentos de nome para escrever código genérico que pode ser compilado para qualquer um dos três tipos de conjuntos de caracteres: ASCII (SBCS), MBCS ou Unicode, dependendo de uma constante de manifesto que você define usando uma instrução #define. Mapeamentos de texto genérico são extensões da Microsoft que não são compatíveis com ANSI.

Diretivas de pré-processador para mapeamentos de texto genérico

#define Versão compilada Exemplo
_UNICODE Unicode (caracteres largos) _tcsrev é mapeado para _wcsrev
_MBCS Caracteres multibyte _tcsrev é mapeado para _mbsrev
Nenhum (o padrão: ambos _UNICODE e _MBCS não definido) SBCS (ASCII) _tcsrev é mapeado para strrev

Por exemplo, a função de texto genérico _tcsrev, definida em TCHAR.H, é mapeada para mbsrev, caso MBCS tenha sido definida em seu programa, ou para _wcsrev, caso _UNICODE tenha sido definida. Caso contrário, _tcsrev é mapeada para strrev.

O tipo de dados de texto genérico _TCHAR, também definido em TCHAR. H, é mapeado para o tipo char, se _MBCS estiver definida, para o tipo wchar_t, se _UNICODE estiver definida, e para o tipo char, se nenhuma constante estiver definida. Outros mapeamentos de tipo de dados são fornecidos em TCHAR. H para conveniência de programação, mas o tipo _TCHAR é o mais útil.

Mapeamentos de tipo de dados de texto genérico

Nome do tipo de dados de texto genérico SBCS (_UNICODE, _MBCS não definidos) _MBCS definido _UNICODE definido
_TCHAR char char wchar_t
_TINT int 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 (removido pelo pré-processador) Nenhum efeito (removido pelo pré-processador) L (converte o próximo caractere ou a próxima cadeia de caracteres no equivalente em Unicode)

Para obter uma lista completa de mapeamentos de texto genérico de rotinas, variáveis e outros objetos, consulte Mapeamentos de texto genérico.

Os fragmentos de código a seguir ilustram o uso de _TCHAR e _tcsrev para mapear os modelos MBCS, Unicode e SBCS.

_TCHAR *RetVal, *szString;
RetVal = _tcsrev(szString);

Se MBCS tiver sido definido, o pré-processador mapeia o fragmento anterior para o código a seguir:

char *RetVal, *szString;
RetVal = _mbsrev(szString);

Se _UNICODE tiver sido definido, o pré-processador mapeia o mesmo fragmento para o código a seguir:

wchar_t *RetVal, *szString;
RetVal = _wcsrev(szString);

Se ambos _MBCS e _UNICODE não tiverem sido definidos, o pré-processador mapeia o fragmento para o código ASCII de byte único, da seguinte maneira:

char *RetVal, *szString;
RetVal = strrev(szString);

Essas macros permitem escrever, manter e compilar um único arquivo de código-fonte usando rotinas específicas para todos os três tipos de conjuntos de caracteres.

Fim da seção específica da Microsoft

Confira também

Mapeamentos de texto genérico
Mapeamentos de tipo de dados
Mapeamentos de variáveis constantes e globais
Mapeamentos de rotina
Um exemplo de programa de texto genérico