Общие вопросы использования Visual C++ для 64-разрядных систем
Обновлен: Ноябрь 2007
При использовании Visual C++ для создания приложений, работающих под 64-разрядной операционной системой Windows, следует обращать внимание на следующие моменты.
int и long представляют собой 32-разрядные значения в 64-разрядной операционной системе Windows. Не присваивайте указатели 32-разрядным переменным в программах, которые будут компилироваться для 64-разрядных платформ. Указатели — это 64-разрядные значения на 64-разрядных платформах, и присваивание их 32-разрядных переменным приведет к усечению значения указателя.
size_t, time_t и ptrdiff_t — это 64-разрядные значения в 64-разрядных операционных системах Windows.
time_t — это 32-разрядное значение в 32-разрядных операционных системах Windows в версиях Visual C++ до Visual C++ 2005. В Visual C++ 2005 и более поздних версиях time_t представляет собой 64-разрядное целое число по умолчанию. Дополнительные сведения см. в разделе Управление временем.
Следует также обращать внимание, где код получает значение int и обрабатывает его как значение size_t или time_t. Число может возрасти до такой степени, что превысит 32-разрядное значение, и данные будут усечены при обратной передаче в хранилище int.
Модификатор %x (шестнадцатеричный формат int) printf не будет правильно работать под 64-разрядной операционной системой Windows. Он будет работать только с первыми 32 битами передаваемого ему значения.
Для отображения целых чисел в 32-разрядной операционной системе Windows используется модификатор %I32x.
Для отображения целых чисел в 64-разрядной операционной системе Windows используется модификатор %I64x.
Модификатор %p (шестнадцатеричный формат для указателя) будет правильно работать под 64-разрядной операционной системой Windows.
Дополнительные сведения см. в разделах: