繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM