2016-04-28 69 views
1

我有一個這樣的雙重功能:爲什麼從雙重函數返回變成int?

double f(){ 
    double value=0.1234; 
    return value; 
} 

在另一個函數I接收到的值和打印它。

printf("%f",f()); 

我希望看到打印的值爲0.1234,而打印爲0。 如果我投這樣的類型:

printf("%f",(double)f()); 

像-147923499.34一個很奇怪的值將被打印出來。

經過一番檢查(print sizeof)後,我發現f()的返回值是4字節,而double類型應該是8字節。

那麼,這是什麼根源呢?我怎樣才能從函數中返回正確的double值?

+8

[似乎工作正常](http://ideone.com/IaZyOU)。請發佈最低限度的可編譯程序,以顯示您的錯誤。 –

+10

也許你在調用'f()' –

+0

@Alfie時沒有範圍的原型:這不是優先級的工作原理,如果它不是至少有兩個原因沒有編譯的話。 –

回答

9

這聽起來像你叫做f()沒有範圍的原型。在C89中,編譯器通過假設f返回int對此做出反應。如果f的實現實際上沒有返回int那麼行爲是未定義的。

在C++和C自C99以後,至少對於此代碼至少有一個警告。檢查您的編譯器輸出,我建議您注意任何警告消息,如果沒有,請調高警告級別。調用函數之前

double f(void); 

修復代碼,寫一個原型。將原型放置在頭文件中是正常的,該頭文件包含在調用函數的代碼和實現該函數的代碼中。然後編譯器會檢測到調用和實現之間的不匹配。

+0

在頭文件中聲明原型後,問題就解決了。我已經刪除了問題的C++標籤。 – Akr

+1

@Akr酷。我建議確保你得到了未固定版本的代碼的編譯器警告,以防你的程序中的其他地方出現類似的錯誤 –