【发布时间】:2019-04-16 15:21:22
【问题描述】:
查看一些代码(用 C 语言编写)我偶然发现了以下内容:
//we have a parameter
uint8_t num_8 = 4;
//we have a function
void doSomething(uint32_t num_32) {....}
//we call the function and passing the parameter
doSomething(num_8);
我很难理解这是否是一个正确的函数调用。这是一个强制转换还是一个错误?
一般来说,我知道在 C/C++ 语言中,只有变量的副本被传递到函数中,但是,我不确定实际发生了什么。编译器是否在堆栈上分配 32 位(用于传递的参数),将所有位归零并在复制参数之后?
谁能告诉我解释参数传递背后机制的资源?
【问题讨论】:
-
这是一个implicit conversion。
-
您的某些答案取决于架构和过程调用标准,例如在 ARM 平台上,参数通常在 R0 中而不是在堆栈中传递。
-
调用约定也可以不同by OS。