我正在尝试在Xcode 4.2上构建一个项目,其中有一些代码将void*
标记为int
。当我尝试here时,这种类型转换在c ++编译期间不会导致错误。
我的项目工作正常,直到我将Valid Architectures
中的Build Settings
从i386
更改为i386 x86_64
,这基本上也编译了64位模式下的代码。我不得不执行此更改,因为我正致力于对项目进行去碳化。所以,在那次改变之后,引入了许多错误,包括我发现有点难以消化的错误。有什么想法可能会发生什么?
答案 0 :(得分:8)
在x86上,void*
长度为32位,int
很可能也是32位长,所以一切正常。
但是,在x86_64上,void*
长度为64位,而int
可能保持32位,因此该值不再适用。
如果您需要将指针存储为整数类型,请使用专为此目的而设计的intptr_t
或uintptr_t
。