簡體   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