Общие вопросы использования 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++