C 我是否必须更改参数';将我的库迁移到64位时的类型?

C 我是否必须更改参数';将我的库迁移到64位时的类型?,c,64-bit,C,64 Bit,我正在将我的库从32位迁移到64位。该库是用C语言编写的。例如,针对以下API: void foo(uint32 var) 在任何情况下,我是否必须将var的类型更改为uint64?如果var的最大值不大于0xffffffff,该怎么办 在任何情况下,我是否必须将var的类型更改为uint64?如果var的最大值不大于0xffffffff,该怎么办 在编译64位数据时,没有任何说明必须更改数据类型。uint32参数的行为与之前相同。(但是,如果要确保数据类型正常工作,可能应该使用中的uint3

我正在将我的库从32位迁移到64位。该库是用C语言编写的。例如,针对以下API:

void foo(uint32 var)
在任何情况下,我是否必须将var的类型更改为
uint64
?如果var的最大值不大于
0xffffffff
,该怎么办

在任何情况下,我是否必须将var的类型更改为
uint64
?如果var的最大值不大于
0xffffffff
,该怎么办

在编译64位数据时,没有任何说明必须更改数据类型。
uint32
参数的行为与之前相同。(但是,如果要确保数据类型正常工作,可能应该使用
中的
uint32\t
。)

你还想去其他几个地方 变量的大小将更改,但如果使用正确的数据类型,行为将自动正确:

  • uintpttr\u t
    这是一个指针大小的整数。因此,您可以从
    void*
    uintptru\t
    进行强制转换,然后返回,而不会丢失任何信息。如果改为从
    void*
    强制转换为
    uint32\u t
    ,则会损坏指针
  • off\t
    文件偏移的大小可能会改变(取决于您的工具链),因此您应该使用此适当的typedef

不,通常不会。当您编写
uint32
时,您的意思是该数据只需要32位。如果您想处理更大的号码,可以将其更改为
uint64
,但随后您必须找到所有呼叫者并将其更改。谢谢。您所说的是,如果
uint32
足够大,则不要更改,除非该变量超出了64位环境中
uint32
的限制。对吗?答案显然取决于函数和参数的含义。对于foo没有通用的答案。任何函数都可以有32位int参数或64位参数,而不管库的位是多少(不管这意味着什么)。一般来说,升级到64位主要是因为默认类型的大小增加,如指针、文件大小。任何给你显式大小的东西都是一样的。64位C和C++应用程序的开发: