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

Unexpected Behaviour on calling simple C function

在 运行 之后的 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("%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未初始化。它可以有 任何 值,否则当您尝试使用它时您的程序可能会崩溃。

未初始化的变量具有不确定的值。这仅意味着该标准没有说明该值应该是多少。如果需要,编译器可以使用固定值或随机值。它在实践中最常做的是使用内存中的任何内容而不进行设置。所以在某种意义上它是随机的,因为它不是完全可预测的。

但是作为一个随机生成器,它很差。有些值比其他值更有可能。全零非常普遍。如果你在一台机器上连续多次运行这个程序,很可能你得到的任何值下次都会相同。

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