gpt4 book ai didi

c - 函数参数转换何时完成?

转载 作者:行者123 更新时间:2023-12-02 04:57:55 25 4
gpt4 key购买 nike

假设我这样声明:

void foo(uint64_t);

并且这个函数是在一个外部汇编文件中定义的。现在我在 C 代码中这样调用它:

uint32_t x = 42;
foo(x);

何时将 x 转换为 uint64_t?我是否可以依赖我的汇编代码始终在相关目标的 ABI 强制要求的任何寄存器/堆栈位置接收 uint64_t,还是我必须自己进行转换?

换句话说,当函数定义对编译器不可用时,foo(x)foo((uint64_t)x) 是否等价?这可能是一个愚蠢的问题,但我不确定这里到底发生了什么。

最佳答案

显然,它从不转换uint64_t,我没有看到任何类型转换代码。相反,它被提升uint64_t,是的,它总是自动发生(根据“通常的算术转换”,正如标准的措辞所言)。因此,您不需要手动转换它。

In other words, are foo(x) and foo((uint64_t)x) equivalent when the function definition is not available to the compiler?

如果只有定义不可用,它们就是。如果缺少声明,那就是另一回事了……(你不应该那样做! - 它会调用未定义的行为,因为 uint32_t 将被假定为参数的类型,它不是。)

关于c - 函数参数转换何时完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17630238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com