我尝试使用 %d
打印 float (我知道不应该这样做。
但每次重新运行可执行文件时,它都会给出不同的值)
我的问题是:为什么打印的值每次都改变?
我的系统:Ubuntu 14.04(64 位)
编译器:4.8.4
这是代码:
#include<stdio.h>
int main(){
float b = 12.3456;
printf("%d\n",b);
}
示例输出:
4bh1@mybox:~/C-fi$ ./test
-1629995944
4bh1@mybox:~/C-fi$ ./test
1147348376
4bh1@mybox:~/C-fi$ ./test
-1746005432
4bh1@mybox:~/C-fi$ ./test
510102216
4bh1@mybox:~/C-fi$
最佳答案
为 printf
使用错误的格式说明符是 undefined behavior 的经典示例.这意味着行为是不可预测的,并且不能依赖于从一次运行到下一次运行是一致的。它可能会崩溃,它可能会打印随机值,或者它可能看起来正常工作。
实际发生的是相关编译器和架构的实现细节。但是,除非您真的在编写编译器,否则深入研究它没有多大用处。
如果您熟悉汇编程序,您可以查看编译后的代码以了解它生成了哪些指令。但是请记住,不同的编译器(即使是具有不同优化设置的相同编译器)很可能会生成不同的程序集。
关于C float 每次执行都会改变 %d 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38266112/