【发布时间】:2013-07-11 21:37:02
【问题描述】:
假设我这样声明:
void foo(uint64_t);
并且这个函数是在一个外部汇编文件中定义的。现在我从 C 代码中这样称呼它:
uint32_t x = 42;
foo(x);
x 何时转换为 uint64_t?我是否可以依靠我的汇编代码在相关目标的 ABI 要求的任何寄存器/堆栈位置始终接收uint64_t,还是我必须自己进行转换?
换句话说,当函数定义对编译器不可用时,foo(x) 和 foo((uint64_t)x) 是否等效?这可能是一个愚蠢的问题,但我不确定这里到底发生了什么。
【问题讨论】:
-
我编辑了词汇表的标题。在 C 标准术语中,强制转换是一种“显式转换”。看来您只是在要求“隐式转换”。
标签: c arguments type-conversion