2015-01-21 64 views
0

比方說,我們有如下代碼:什麼是從一個函數調用的返回值,如果該功能並沒有真正提供一個

int func(char str[], int len) { 
    // Don't return anything here. 
} 

int main() { 
    char str[] = "Hello"; 
    int result = func(str, strlen(str)); 
    printf("%d\n", result); 
} 

它將打印我的計算機上的某些字符串值-1679929632。我執行時會不時變化。

任何人都可以解釋爲什麼會發生這種情況?

+2

這是未定義的行爲。它可能是任何事情或崩潰。 – 2015-01-21 05:10:09

+0

這個值是從StackFrame讀取的嗎?這有什麼潛在的價值?一些局部變量或返回地址? – 2015-01-21 05:11:39

+0

這可能會幫助你理解:http://stackoverflow.com/questions/12376461/what-actually-happens-when-a-function-with-the-warning-control-reaches-end-o值通常是無論發生什麼位於用於返回該類型值的寄存器中。 – 2015-01-21 05:14:06

回答

5

如果在函數定義中沒有返回語句,則在執行被調用函數的最後一個語句後,控制自動返回到調用函數。在這種情況下,被調用函數的返回值是undefined。如果不需要返回值,則聲明該函數具有void返回類型;否則,默認返回類型是int。

如上所述,它的未定義,所以找到一些隨機值作爲返回的根本原因將是無用的。

相關問題