以下代碼使用Codeblocks將輸出設置爲0 0 0 0。main()的遞歸的不可預知的輸出
int main()
{
static int i=5;
if(--i){
main();
printf("%d ",i);
}
}
我完全理解上面的代碼是如何執行的。然而,當我從代碼中刪除'static'並使用int i = 5時,Ideone.com(在線編譯器)給了我運行時錯誤,並且Codeblocks(使用GCC)給我什麼都不給 - 即使終端不彈出。
我也嘗試將聲明部分放在主體之外,即static int i;在主體中,我然後給了我= 5 ;.不過,我收到了上述錯誤。我不知道發生了什麼。任何幫助將不勝感激。
PS:程序在網站上找到,沒有給出解釋。
您可能想要了解什麼是靜態局部變量。例如:http://stackoverflow.com/q/572547/1025391 – moooeeeep 2014-08-27 16:41:05
IIRC'main'函數在C99或C11標準規範中具有非常特殊的地位,不允許被調用(遞歸)。所以這是未定義的行爲。 – 2014-08-27 17:05:08