c - 这第二句话到底在说什么?
问题描述
由于函数调用的参数是表达式,因此在将参数传递给函数时也会发生类型转换。在没有函数原型的情况下,char 和 short 变为 int,而 float 变为 double。
我得到了第一句话。有人可以解释第二句话吗?
在没有函数原型的情况下,char 和 short 变为 int,而 float 变为 double。
解决方案
标准 C 提供了两种声明函数的方式。现代方式,称为原型,声明参数的类型。例如,void foo(char a, float b);
。旧方式不包括参数类型。例如,void foo();
。
在声明函数的旧方法中,比窄的整数参数int
传递为int
(或,在某些情况下,传递为unsigned int
),并且float
参数传递为double
。这主要是因为 C 语言发展的环境和它处理小整数的灵活性。
如果调用使用原型声明的函数,C 实现会知道参数的类型并将每个参数转换为目标类型。如果你调用一个没有原型声明的函数,C 实现不知道函数定义中参数的真实类型,但它知道窄整数类型必须作为int
(or unsigned int
) 传递,float
参数必须作为 传递double
。因此,这些类型的任何参数都将根据需要转换为int
、unsigned int
或double
。
推荐阅读
- node.js - Nodemon 崩溃:TypeError:无法读取 null 的属性“__nodemonRestart”
- c# - 将 dapper 与 .net 核心一起使用时,对象必须实现 IConvertible Exception
- flutter - Flutter Slider 标签重叠的解决方法
- javascript - 单击内容中的链接不起作用(非 CSS 问题)
- laravel - 无法上传图片 laravel
- laravel - 重置密码后未重定向 Laravel 6 用户
- excel - 在 Excel 范围内 - 忽略空单元格
- python - 根据 ID 和日期计算输入
- python - 模糊屏幕但保持功能
- json - 这是 Postman 中的请求限制,是一种改变它的方法