Habilitação internacional
A maioria dos códigos C e C++ tradicionais faz suposições sobre manipulação de caracteres e cadeias de caracteres que não funcionam bem em aplicativos internacionais. Embora o MFC e a biblioteca em tempo de execução ofereçam suporte a Unicode ou MBCS, você ainda tem trabalho para fazer. Para guiá-lo, esta seção explica o significado de "habilitação internacional" no Visual C++:
O Unicode e o MBCS são habilitados por meio de tipos de dados portáteis em listas de parâmetros de função do MFC e tipos de retorno. Esses tipos são definidos condicionalmente das maneiras apropriadas, dependendo se o build define o símbolo
_UNICODE
ou o símbolo_MBCS
(que significa DBCS). Variantes diferentes das bibliotecas do MFC são vinculadas automaticamente ao seu aplicativo, dependendo de quais desses dois símbolos seu build define.O código da biblioteca de classes usa funções de tempo de execução portáteis e outros meios para garantir o comportamento correto do Unicode ou do MBCS.
Você ainda deve tratar determinados tipos de tarefas de internacionalização em seu código:
Usar as mesmas funções de tempo de execução portáteis que tornam o MFC portátil em todo ambiente.
Torne cadeias de caracteres literais e caracteres portáteis em todos os ambientes, usando a macro
_T
. Para obter mais informações, consulte Mapeamentos de texto genérico em tchar.h.Tome as devidas precauções ao analisar cadeias de caracteres em MBCS. Essas precauções não são necessárias no Unicode. Para obter mais informações, consulte Dicas de programação do MBCS.
Tenha cuidado caso você misture caracteres ANSI (8 bits) e Unicode (16 bits) em seu aplicativo. É possível usar caracteres ANSI em algumas partes do programa e caracteres Unicode em outras, mas você não pode misturá-los na mesma cadeia de caracteres.
Não codifique cadeias de caracteres em seu aplicativo. Em vez disso, torne-as em recursos STRINGTABLE adicionando-as ao arquivo .rc do aplicativo. Em seguida, seu aplicativo pode ser localizado sem exigir alterações de código-fonte ou recompilação. Para obter mais informações sobre recursos STRINGTABLE, consulte Editor de cadeia de caracteres.
Observação
Conjuntos de caracteres europeus e MBCS têm alguns caracteres, como letras acentuadas, com códigos de caracteres maiores que 0x80. Como a maioria dos códigos usa caracteres assinados, esses caracteres maiores que 0x80 são estendidos por sinal quando convertidos em int
. Esse é um problema para a indexação de matriz porque os caracteres estendidos por sinal, sendo negativos, indexam fora da matriz. Idiomas que usam MBCS, como o japonês, também são exclusivos. Como um caractere pode consistir em 1 ou 2 bytes, você sempre deve manipular os dois bytes ao mesmo tempo.