2014-11-15 138 views
0
#include <stdio.h> 
int func() 
{ 

} 
int main(void) 
{ 
    printf("%d\n",func()); 
    return 0; 
} 

函數「func()」是「int」返回類型,但沒有返回任何東西。當函數在打印函數中被調用時,爲什麼它輸出0?爲什麼編譯成功,雖然函數定義不同意函數代碼?爲什麼這不給編譯錯誤

回答

4

如果啓用警告,您將看到診斷信息。傳統上,C隱含地允許所有函數返回int。返回值的行爲是未定義的,因此它不能保證爲0.行爲可能會在不同的編譯器或不同的平臺上或使用不同的優化標誌或甚至僅僅通過添加或刪除其他不相關的代碼而改變。您可能會看到0的原因是因爲您正在運行未優化,以及無論先前的值發生在寄存器中還是堆棧位置都爲0.這是純粹的機會,並且依賴於行爲將最終導致代碼中的錯誤

+0

所有GCC編譯器都給出了輸出0. –

+0

行爲未定義。你可以得到一個隨機值或崩潰或任何東西。 – b4hand

+2

@AmanMahajan也許,但不能保證。 –