我注意到了
float f; [..] printf("%in", f);
不合理
但
printf("%in", (int)f);
是
但是也
int func(float f) { return f; }
好的
printf("%in", func(f));
是由返回流程或标准支持的function完成的转换/转换,还是理想的需要
int func(float f) { return (int) f; }
?
转换是标准的。 ISO C99标准的相关部分见6.8.6.4节第3段:
如果表达式的类型与其出现的函数的返回类型不同,则转换该值,就好像通过赋值给具有函数返回类型的对象一样。
所以它被隐式转换,就像它在这个赋值中一样:
float f = 3.0f; int i; i = f;
允许的转化次数为:
(您的示例与第一个匹配 – int
和float
都是算术类型)
通常,当表达式具有某种数字类型,并且其上下文需要不同的数字类型时,将自动进行适当的转换。 这适用于以下情况:
void f(float); void g(long); int i = 3; f(i); /*function call, with a prototype in scope*/ g(i); /*ditto*/ double d = i; /*assignment*/
该原则也适用于表达式return
指令。
该原理不适用于printf
等可变函数。 原因是正确的转换取决于格式字符串,编译器不需要分析格式字符串; 实际上,如果格式不是字符串文字,编译器通常无法对其进行分析。 因此,在以下printf
调用中,所有强制转换都是必需的:
int i = 3; float f = 1.5; printf("%ld %f %dn", (long)i, (double)i, (int)f);
但是,由于促销( char
和short
被提升为int
, float
被提升为double
)以及%c
期望int
的事实,在以下printf
调用中没有任何强制转换:
char c = 'a'; float f = 1.5; printf("%c %d %f", c, c, f);
以上就是c/c++开发分享返回过程是否根据C标准转换/转换结果所需的类型,或者仅在某些实现中支持?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/544875.html