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