将库迁移到 64 位时是否必须更改参数类型?
Do I have to change param's type when migrating my lib to 64bit?
我正在将我的库从 32 位迁移到 64 位。该库是用 C 语言编写的。为以下 API 说:
void foo(uint32 var)
在任何情况下都必须将 var 的类型更改为 uint64
吗?如果 var 的最大值不大于 0xffffffff
怎么办?
Do I have to change the type of var to uint64
in any circumstances? What if max of var is not greater than 0xffffffff
?
没有说在为 64 位编译时必须更改数据类型。 uint32
参数的行为与之前相同。 (但是,如果您想保证您的数据类型正确工作,您可能应该使用 <stdint.h>
中的 uint32_t
。)
还有其他几个地方您想要
要更改的变量的大小,但如果使用正确的数据类型,行为将自动更正:
uintptr_t
这是一个指针大小的整数。因此,您可以从 void*
转换为 uintptr_t
并返回而不会丢失任何信息。如果您改为从 void*
转换为 uint32_t
,您将破坏您的指针。
off_t
文件偏移的大小可能会改变(取决于你的工具链),所以你应该使用这个合适的 typedef。
我正在将我的库从 32 位迁移到 64 位。该库是用 C 语言编写的。为以下 API 说:
void foo(uint32 var)
在任何情况下都必须将 var 的类型更改为 uint64
吗?如果 var 的最大值不大于 0xffffffff
怎么办?
Do I have to change the type of var to
uint64
in any circumstances? What if max of var is not greater than0xffffffff
?
没有说在为 64 位编译时必须更改数据类型。 uint32
参数的行为与之前相同。 (但是,如果您想保证您的数据类型正确工作,您可能应该使用 <stdint.h>
中的 uint32_t
。)
还有其他几个地方您想要 要更改的变量的大小,但如果使用正确的数据类型,行为将自动更正:
uintptr_t
这是一个指针大小的整数。因此,您可以从void*
转换为uintptr_t
并返回而不会丢失任何信息。如果您改为从void*
转换为uint32_t
,您将破坏您的指针。off_t
文件偏移的大小可能会改变(取决于你的工具链),所以你应该使用这个合适的 typedef。