我注意到了
float f;
[..]
printf("%i\n", f);
Run Code Online (Sandbox Code Playgroud)
不合理
但
printf("%i\n", (int)f);
Run Code Online (Sandbox Code Playgroud)
是
但是也
int func(float f) {
return f;
}
Run Code Online (Sandbox Code Playgroud)
没问题
printf("%i\n", func(f));
Run Code Online (Sandbox Code Playgroud)
是由返回流程或标准支持的功能完成的转换/转换,还是理想的需要
int func(float f) {
return (int) f;
}
Run Code Online (Sandbox Code Playgroud)
?
转换是标准的.ISO C99标准的相关部分见6.8.6.4节第3段:
如果表达式的类型与其出现的函数的返回类型不同,则通过赋值给具有函数返回类型的对象来转换该值.
所以它被隐式转换,就像它在这个赋值中一样:
float f = 3.0f;
int i;
i = f;
Run Code Online (Sandbox Code Playgroud)
允许的转化次数为:
void,返回类型具有表达式类型的所有限定符;_Bool,表达式是指针.(你的榜样相匹配的第一个-无论是int和float是算术型)