【发布时间】:2010-11-21 19:01:54
【问题描述】:
来自 C 编程语言第 2 版:
由于函数调用的参数是一个表达式,因此在将参数传递给函数时也会发生类型转换。在没有函数原型的情况下,char 和 short 变成 int,float 变成 double。
通过阅读文本,我得到的印象是,除非您使用强制转换或函数原型明确指定参数类型,否则函数参数将始终以 int 或 double 形式传递。
为了验证我的假设,我编译了以下代码:
#include <stdio.h>
main()
{
unsigned char c = 'Z';
float number = 3.14f;
function_call(c, number);
}
void function_call(char c, float f)
{
}
编译后我收到以下警告:
typeconversion.c:11:警告:“function_call”的类型冲突
typeconversion.c:7:警告:“function_call”的先前隐式声明在这里
我的猜测是 c 和 number 在函数调用中都被转换为 int 和 double,然后又被转换回 char 和 float。真的是这样吗?
【问题讨论】:
-
这是一个很好的问题 - 也说明了为什么始终在范围内拥有一个原型并声明所有参数很重要。
-
“转换回来”?为什么?
c和number的值在传递给函数时被强制转换为int和double类型,但没有什么可以“转换回来”。
标签: c type-conversion