gpt4 book ai didi

c - printf 为什么以及如何挑选出匹配的参数?

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:40 25 4
gpt4 key购买 nike

有人问我,为什么这段代码会产生一个随机数:

double a = 75.0;
printf("%d\n", a);

我认为原因是 double 的 4 个字节被解释为整数,但每次程序运行时打印的值都不一样。所以我开始尝试更多的东西并发现:

printf("%d\n", 75.0, 6);

实际上打印出数字 6。所以我认为编译器正在尝试修复参数以便它们与格式字符串匹配,但后来我尝试了这个:

const char *formats[] = { "%d %.1f\n", "%.1f %d\n" };
int whichFormat = 0;
scanf("%d", &whichFormat);
printf(formats[whichFormat&1], 2.5, 7, 1.2);

格式化字符串现在甚至在编译时都不知道,但它仍然以某种方式设法将参数类型与格式化字符串相匹配,打印 7 2.52.5 7取决于输入。未打印最后一个值 (1.2)。

所有这些都可以在 compileonline.com 复制声称使用 GNU GCC 4.8.1。

这是怎么回事?

最佳答案

未定义的行为正在发生。

这种行为是未定义的,因此很难推理,而且做实验也有点毫无意义,因为不能保证对于相同的输入行为保持相同(即明确定义)。毕竟,该行为是未定义的。

例如,第一个示例可能从一个寄存器中读取预期的整数参数,而实际的浮点参数在另一个寄存器中。我并不是说任何已知机器上都会发生这种情况,但它可能是这样的。

关于c - printf 为什么以及如何挑选出匹配的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26510394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com