Problemas de migração de 64 bits do Visual C++comuns
Ao usar o compilador do MSVC (Microsoft C++) para criar aplicativos para serem executados em um sistema operacional Windows de 64 bits, você deve estar ciente dos seguintes problemas:
Um
int
e umlong
são valores de 32 bits em sistemas operacionais Windows de 64 bits. Para programas que você planeja compilar para plataformas de 64 bits, tenha cuidado para não atribuir ponteiros a variáveis de 32 bits. Os ponteiros são de 64 bits em plataformas de 64 bits e você truncará o valor do ponteiro se você atribuí-lo a uma variável de 32 bits.size_t
,time_t
eptrdiff_t
são valores de 64 bits em sistemas operacionais Windows de 64 bits.time_t
é um valor de 32 bits em sistemas operacionais Windows de 32 bits no Visual Studio 2005 e anteriores.time_t
agora é um inteiro de 64 bits por padrão. Para obter mais informações, confira Gerenciamento de Tempo.Você deve estar ciente do local em que seu código usa um valor
int
e o processa como um valorsize_t
outime_t
. É possível que o número possa crescer para ser maior do que um número de 32 bits e os dados serão truncados quando forem passados de volta para o armazenamentoint
.
O modificador %x (formato hexadecimal int
) printf
não funcionará conforme o esperado em um sistema operacional Windows de 64 bits. Ele só funcionará nos primeiros 32 bits do valor que é passado para ele.
Use %I32x para exibir um tipo integral de 32 bits no formato hexadecimal.
Use %I64x para exibir um tipo integral de 64 bits no formato hexadecimal.
O %p (formato hexadecimal para um ponteiro) funcionará conforme o esperado em um sistema operacional Windows de 64 bits.
Para saber mais, veja:
Confira também
Configurar projetos C++ para destinos x64 de 64 bits
Guia de atualização e portabilidade do Visual C++