[英]Unexpected Behaviour on calling simple C function
在按照 c 代码运行时,output 既不是 0 也不是常数,即使在尝试在随机块中使用一些打印语句之后,我也不能断定发生了什么
#include <stdio.h>
int random(int start, int end); // start, end are just added to make sure that results are not same due to caching.
int main(void) {
int i;
for (i=0; i<10; i++)
printf("%d\n", random(0, i));
return 0;
}
int random(int start, int end) {
int out_num;
return out_num;
}
$ gcc -o ./compiled/bogo_binary_search bogo_binary_search.c && ./compiled/bogo_binary_search
0
32653
32653
32653
32653
32653
32653
32653
32653
32653
int random(int start, int end) {
int out_num;
return out_num;
}
局部变量out_num
未初始化。 它可能有任何价值,或者当您尝试使用它时您的程序可能会崩溃。
未初始化的变量具有不确定的值。 这只意味着标准没有说明价值应该是什么。 如果需要,编译器可以使用固定值或随机值。 它在实践中最常做的是使用 memory 中的任何内容而不进行设置。 所以在某种意义上它是随机的,因为它不是完全可预测的。
但是作为一个随机生成器,它很差。 有些值比其他值更有可能。 全零非常常见。 而且,如果您在一台机器上连续多次运行该程序,那么很可能下一次您得到的任何值都相同。
当然,读取未初始化的变量是未定义的行为,所以理论上,编译器可以做任何事情。 但它很可能只会打印该值,无论它是什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.