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 um long 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 e ptrdiff_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 valor size_t ou time_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 armazenamento int.

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++