Problemas comunes de migración a 64 bits en Visual C++
Actualización: noviembre 2007
Si utiliza Visual C++ para crear aplicaciones que se ejecuten en un sistema operativo Windows de 64 bits, debe tener presente lo siguiente:
Los valores int y long tienen 32 bits en los sistemas operativos Windows de 64 bits. Para programas que desea compilar para plataformas de 64 bits, debe tener cuidado de no asignar punteros a variables de 32 bits. Los punteros son de 64 bits en plataformas de 64 bits y truncará el valor de puntero si lo asigna a una variable de 32 bits.
Los valores size_t, time_t y ptrdiff_t tienen 64 bits en los sistemas operativos Windows de 64 bits.
time_t es un valor de 32 bits en sistemas operativos Windows de 32 bits en versiones de Visual C++ anteriores a Visual C++ 2005. En Visual C++ 2005 y versiones posteriores, el valor predeterminado de time_t es un entero de 64 bits. Para obtener más información, vea Administración del tiempo.
Debe conocer los lugares del código donde se obtiene un valor int y se procesa como un valor size_t o time_t. Es posible que el número aumente hasta superar un valor de 32 bits, por lo que se truncarán los datos cuando se devuelvan al almacenamiento int.
El modificador printf de %x (formato int hexadecimal) no tendrá el comportamiento esperado en un sistema operativo Windows de 64 bits. Sólo funcionará en los primeros 32 bits del valor que se le pasa.
Use %I32x para presentar un entero en un sistema operativo Windows de 32 bits.
Use %I64x para presentar un entero en un sistema operativo Windows de 64 bits.
%p (formato hexadecimal de un puntero) tiene el comportamiento esperado en un sistema operativo Windows de 64 bits.
Para obtener más información al respecto, vea: