首页 > 解决方案 > 在 c 中强制转换会导致任何编译错误?

问题描述

我知道在java中我不能从一个假设返回一个int值而不进行强制转换的函数返回double,但是现在当我学习c时,我看到我可以编译类似的东西(只有警告,没有错误):

int calc(double d, char c) {
   return d * c / 3;
}

所以我的问题是,c 编译器总是会在需要时为我自动转换?还是因为 char 或其他原因,这是特定的工作?

标签: c

解决方案


C 有一个隐式转换的概念,即定义在哪些条件下以及如何将值隐式转换为不同类型的规则,而无需显式转换它们(例如,参见cppreference.com)。所以 C 不是“自动铸造”一切,而只是在某些条件下。

您的返回类型是int,而表达式的结果d * c / 3double。所以以下(隐式)转换适用:

真正的浮点整数转换

任何实浮点类型的有限值都可以隐式转换为任何整数类型。除非上面的布尔转换涵盖,规则是: 小数部分被丢弃(截断为零)。如果结果值可以由目标类型表示,则使用该值,否则,行为未定义


推荐阅读