我为一次测验写了一些C代码.问题是,这个程序根据C17标准打印什么:
#include <stdio.h>
void foo(a)
{
auto b = 1.7f;
printf("%d\n", (int) (a + b));
}
int main(void)
{
foo(10.6f);
}
我原以为答案是11
.我的推理是这样的:a
默认为int
,因为如果您没有为参数指定类型(在<;c23中),那么就会发生这种情况,因此10.6f
会将类型转换为值为10
的int
.b
默认为int
,因为auto
只表示自动存储持续时间(同样,在<;c23中),因此1.7f
将类型转换为值为1
的int.
但是,该函数打印2
,似乎与传递给函数的浮点数的值无关.如果我传递一个int,它会如我所期望的那样工作.
这里发生了什么事?我误解了什么?
edit:我开始怀疑UB了.因为如果我这么做:
float f = 10.6f;
printf("%f\n", f);
foo(f);
结果我得了1
分.