Общие вопросы использования Visual C++ для 64-разрядных систем

При использовании компилятора Microsoft C++ (MSVC) для создания приложений, запуск которых планируется в 64-разрядной версии ОС Windows, следует знать следующее:

  • В 64-разрядных версиях Windows int и long являются 32-разрядными значениями. В программах, которые планируется компилировать для 64-разрядных платформ, не следует назначать указателям 32-разрядные переменные. В 64-разрядных платформах указатели являются 64-разрядными, поэтому значение указателя будет усечено, если назначить ему 32-разрядную переменную.

  • В 64-разрядных версиях Windows size_t, time_t и ptrdiff_t являются 64-разрядными значениями.

  • В версии Visual Studio 2005 и более ранних time_t является 32-разрядным значением в 32-разрядных версиях Windows. Теперь time_t по умолчанию представляет собой 64-разрядное целое число. Дополнительные сведения см. в разделе Управление временем.

    Следует знать, где ваш код принимает значение int и обрабатывает его как значение size_t или time_t. Разрядность может превысить 32 бита. В этом случае данные будут усечены при их возвращении в хранилище int.

Модификатор %x (шестнадцатеричный формат int) printf не будет действовать в 64-разрядных версиях Windows ожидаемым образом. Он будет обрабатывать только первые 32 бита передаваемого ему значения.

  • Для отображения 32-разрядных целочисленных типов в шестнадцатеричном формате используйте модификатор %I32x.

  • Для отображения 64-разрядных целочисленных типов в шестнадцатеричном формате используйте модификатор %I64x.

  • Модификатор %p (шестнадцатеричный формат для указателя) в 64-разрядных версиях Windows действует правильно.

Дополнительные сведения см. в разделе:

См. также

Настройка проектов C++ для 64-разрядных целевых объектов с архитектурой x64
Руководство по переносу и обновлению Visual C++