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.
Quando a constante _MBCS de manifesto é definida, uma determinada rotina de texto genérico é mapeada para um dos seguintes tipos de rotinas:
Uma rotina SBCS que gere bytes, caracteres e sequências de caracteres multibyte de forma apropriada. Nesse caso, espera-se que os argumentos de cadeia de caracteres sejam do tipo
char*. Por exemplo,_tprintfmapeia paraprintf; os argumentos de cadeia de caracteres paraprintfsão do tipochar*. Se utilizar o tipo de dados de texto genérico_TCHARpara os seus tipos de cadeia de caracteres, os tipos de parâmetro formal e real paraprintfdevem corresponder porque_TCHAR*mapeia parachar*.Uma rotina específica do MBCS. Nesse caso, espera-se que os argumentos de cadeia de caracteres sejam do tipo
unsigned char*. Por exemplo,_tcsrevmapeia para_mbsrev, que espera e retorna uma cadeia de caracteres do tipounsigned char*. Se utilizar o tipo de dados de texto genérico para os seus tipos de strings, existe um potencial conflito de tipo porque_TCHARmapeia para o tipo_TCHARchar.
A seguir estão três soluções para evitar esse tipo de conflito (e os avisos do compilador C ou erros do compilador C++ que resultariam):
Use o comportamento padrão. tchar.h fornece protótipos de rotinas de texto genérico para rotinas nas bibliotecas de tempo de execução, como no exemplo a seguir.
char * _tcsrev(char *);No caso padrão, o protótipo para
_tcsrevmapeia para_mbsrevatravés de um thunk em Libc.lib. Isso altera os tipos dos parâmetros de entrada_mbsreve o valor de retorno de_TCHAR*(ou seja,char *) paraunsigned char *. Esse método garante a correspondência de tipo quando você está usando_TCHAR, mas é relativamente lento devido à sobrecarga de chamada de função.Use a função inlining incorporando a seguinte instrução de pré-processador em seu código.
#define _USE_INLININGEste método faz com que uma função embutida thunk, fornecida em tchar.h, mapeie a rotina de texto genérico diretamente para a rotina MBCS apropriada. O seguinte trecho de código de tchar.h fornece um exemplo de como isso é feito.
__inline char *_tcsrev(char *_s1) {return (char *)_mbsrev((unsigned char *)_s1);}Se puderes usar inlining, esta é a melhor solução, porque garante a compatibilidade de tipo e não tem custo de tempo adicional.
Use o mapeamento direto incorporando a seguinte instrução de pré-processador em seu código.
#define _MB_MAP_DIRECTEssa abordagem fornece uma alternativa rápida se você não quiser usar o comportamento padrão ou não puder usar o inlining. Isso faz com que a rotina de texto genérico seja mapeada por uma macro diretamente para a versão MBCS da rotina, como no exemplo a seguir de tchar.h.
#define _tcschr _mbschrAo adotar essa abordagem, você deve ter cuidado para garantir o uso de tipos de dados apropriados para argumentos de cadeia de caracteres e valores de retorno de cadeia de caracteres. Você pode usar a conversão de tipo para garantir a correspondência de tipo adequada ou pode usar o
_TXCHARtipo de dados de texto genérico._TXCHARassocia-se ao tipocharno código SBCS, mas associa-se ao tipounsigned charno código MBCS. Para obter mais informações sobre macros de texto genérico, consulte Mapeamentos deGeneric-Text na Referência de BibliotecaRun-Time.