将库迁移到 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。