C型香蕉中的类型转换?

基督教

似乎C和我在这里的预期输出上存在分歧。

我有:

struct r_struct {
    int r_i;
    float r_f, r_f2;
};

struct r_struct r;

r.f = 100.0;

[...]
printf("f is A:%f B:%d, C:%d, D:%d\n", r.f, r.f, r.f_lhzr / 1, (int)r.f);

我得到以下输出:

f is A:100.000000 B:0, C:1079574528, D:0

我期望得到此输出,因为浮点数应以所有三种方式强制转换为整数:

f is A:100.000000 B:100, C:100, D:100

有人可以解释一下吗?

云诺什

根据的规范printf(),例如https://en.cppreference.com/w/cpp/io/c/fprintf

如果默认转换后的任何参数不是相应的转换说明符所期望的类型,或者参数的数量少于format所要求的数量,则该行为是undefined

您有浮点值,并且只将其强制转换为int
您可以"%d"对浮点数使用说明符,即对于所有输出和任何其他行为(不仅对于非强制值),任何可预测或可解释的行为都将结束。

speficier和type之间的对比已由SomeProgrammerDude在注释中指出。我在此处参考spec添加了UB方面。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章