假设我有以下类似内容可以在C中调用函数:
void test1(void) {
int a=7;
function((short) a);
}
编译器是否(几乎)像对待创建临时变量并将其传递给函数一样对待它,例如:
void test1(void) {
int a=7;
short tmp_a=(short) a;
function(tmp_a);
}
还是至少在概念上,演员表与上述内容有什么不同?
强制转换只是运算符,例如乘法或移位。当函数参数是一个表达式时,它的计算方式与其他任何表达式一样。因此function((short) a);
等于:
short tmp_a = (short) a;
function(tmp_a);
在以同样的方式function(a*a);
等同于:
int tmp_a = a*a;
function(tmp_a);
请注意,函数调用中还涉及隐式转换。如果函数具有原型,则将参数转换为参数的声明类型。如果没有原型,或者参数对应于...
原型的一部分,则会执行一些默认的参数提升。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句