调用简单C函数时出现意外行为



在运行以下c代码时,输出既不是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("%dn", 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未初始化。它可能有任何值,或者当你试图使用它时,你的程序可能会崩溃。

未初始化的变量具有不确定的值。这只意味着标准没有说明值应该是什么。如果编译器愿意,可以使用固定值或随机值。在实践中,它最常做的是在不设置的情况下使用内存中的任何内容。因此,从某种意义上说,它是随机的,因为它不是完全可预测的。

但作为一个随机生成器,它非常糟糕。有些值比其他值更有可能。全零是非常常见的。如果你在一台机器上连续运行这个程序很多次,那么下次你得到的值很可能都是一样的。

当然,读取未初始化的变量是未定义的行为,所以我认为编译器可以做任何事情。但它很可能只会打印价值,不管它是什么

最新更新