Information
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.
We recommend using Visual Studio 2017

Common Visual C++ 64-bit Migration Issues

 

The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.

The latest version of this topic can be found at Common Visual C++ 64-bit Migration Issues.

When you use Visual C++ to create applications to run on a 64-bit Windows operating system, you should be aware of the following issues:

  • An int and a long are 32-bit values on 64-bit Windows operating systems. For programs that you plan to compile for 64-bit platforms, you should be careful not to assign pointers to 32-bit variables. Pointers are 64-bit on 64-bit platforms, and you will truncate the pointer value if you assign it to a 32-bit variable.

  • size_t, time_t, and ptrdiff_t are 64-bit values on 64-bit Windows operating systems.

  • time_t is a 32-bit value on 32-bit Windows operating systems in Visual C++ versions before Visual C++ 2005. time_t is now a 64-bit integer by default. For more information, see Time Management.

    You should be aware of where your code takes an int value and processes it as a size_t or time_t value. It is possible that the number could grow to be larger than a 32-bit number and data will be truncated when it is passed back to the int storage.

The %x (hex int format) printf modifier will not work as expected on a 64-bit Windows operating system. It will only operate on the first 32 bits of the value that is passed to it.

  • Use %I32x to display a 32-bit integral type in hex format.

  • Use %I64x to display a 64-bit integral type in hex format.

  • The %p (hex format for a pointer) will work as expected on a 64-bit Windows operating system.

For more information, see:

Configuring Programs for 64-Bit
Visual C++ Porting and Upgrading Guide

Show: