在OS X上迁移到64位的最佳做法是什么?使用10.6 SDK和64位intel作为我的SDK和目标。
我有要更改的int32类型
OS X是否具有'int64'或者是否会使用'long long'?
我在哪里可以找到可用数据类型的资源?
还有哪些其他问题?
答案 0 :(得分:6)
Apple拥有您想要的文档,名为64-bit transition guide。 OS X使用LP64模型,因此您应该使用
#ifdef __LP64__
等。根据位宽有条件地编译东西,特别是如果你希望你的代码是32位/ 64位干净。
对于Cocoa,请参阅64 bit Transition Guide for Cocoa。在那里,NSInteger
根据模式具有适当的位宽,因此您不必自己处理位宽。
答案 1 :(得分:1)
在OS X上构建64位时,long
和long long
都是64位类型。此外,您还可以使用在{x}中定义的int64_t
和uint64_t
类型<stdint.h>
如果需要指定一个整数正好是64位宽。
您通常不需要更改程序中的现有int32
类型,除非它们被用于执行指针运算(或者取决于它们与指针的大小相同)。在64位程序中,32位运算继续正常工作。如果您做的变量必须与指针的大小相同,请使用uintptr_t
类型,这将在32位和64位版本中都有效。
您可能需要进行更改的另一种情况是API是否希望传递(或返回)size_t
或long
或intptr_t
,并且您一直在使用int
始终为{{1}},而不是实际指定的函数。它将用于32位版本,但在为64位构建时可能会引入错误。
Yuji 建议阅读64位过渡指南是一个很好的建议。