Problemas comunes de migración a 64 bits en Visual C++

Al usar el compilador de Microsoft C++ (MSVC) para crear aplicaciones que se ejecutan en un sistema operativo Windows de 64 bits, debe tener en cuenta lo siguiente:

  • int y long son valores de 32 bits en sistemas operativos Windows de 64 bits. Debe tener cuidado de no asignar punteros a variables de 32 bits en los programas que piense compilar para plataformas de 64 bits. Los punteros son de 64 bits en las plataformas de 64 bits; si asigna un puntero a una variable de 32 bits, se truncará su valor.

  • size_t, time_t y ptrdiff_t son valores de 64 bits en sistemas operativos Windows de 64 bits.

  • time_t es un valor de 32 bits en sistemas operativos Windows de 32 bits en Visual Studio 2005 y versiones anteriores. time_t es ahora un entero de 64 bits de forma predeterminada. Para obtener más información, vea Administración de la duración.

    Debe tener en cuenta los lugares en que el código toma un valor int y lo procesa como valor size_t o time_t. Es posible que el número aumente hasta superar un número de 32 bits y que los datos se trunquen al volver a pasarlo al almacenamiento int.

El modificador printf %x (int en formato hexadecimal) no funcionará según lo esperado en un sistema operativo Windows de 64 bits. Sólo operará en los primeros 32 bits del valor que se le pasa.

  • Use % I32x para presentar un tipo entero de 32 bits en formato hexadecimal.

  • Use % I32x para presentar un tipo entero de 64 bits en formato hexadecimal.

  • El modificador %p (un puntero en formato hexadecimal) funcionará según lo esperado en un sistema operativo Windows de 64 bits.

Para más información, consulte:

Consulte también

Configuración de proyectos de C++ para destinos x64 de 64 bits
Guía de migración y actualización de Visual C++