2014-01-17 2 views
3

Я пытаюсь создать проект на Xcode 4.2, в котором есть код, который выводит void* на int. Это приведение типов не приводит к ошибке во время компиляции C++, как я пытался here.Ошибка typecasting void pointer to int

Он также работает хорошо в моем проекте, пока я не изменил Valid Architectures в Build Settings от i386 к i386 x86_64, которые в основном компилирует код в 64-битном режиме тоже. Мне пришлось выполнить это изменение, так как я работаю над декарбонизацией проекта. Итак, после этого изменения было внесено множество ошибок, в том числе и тот, который мне трудно усвоить. Какие-нибудь идеи, что может произойти?

ответ

7

На x86, void* имеет длину 32 бит, а int, скорее всего, также будет длиной 32 бит, поэтому все будет работать.

На x86_64, однако, void* имеет длину 64 бит, а int, вероятно, останется 32 бит, поэтому значение больше не подходит.

Если вам нужно сохранить указатель в интегральном типе, используйте intptr_t или uintptr_t, которые предназначены для этой цели.

+0

Спасибо! Это имеет смысл. – Sankalp

Смежные вопросы