2011-07-14 79 views
1

該程序的第7行「pay = prt(pay);」應該拋出一個編譯或運行時錯誤,因爲它將一個int傳遞給需要雙精度的參數。我用dev-C++編譯它並且用兩行輸出運行程序。請解釋一下,謝謝。具有不同數據類型的函數調用

#include <stdio.h> 
int prt(double b); 
main() 
{ 
    int pay = 3; 
    double tax = 2.2; 
    pay = prt(pay); 
    prt(tax); 
}  

int prt(double b) 
{ 
    b *= 2; 
    printf("%.2lf\n", b); 
} 
+0

http://stackoverflow.com/questions/175689/can-you-use-keyword-explicit-to-prevent-automatic-conversion-of-method-parameters提供了一個有趣的方式來強制類型嚴格在這裏,依靠模板和私人訪問... – fearlesstost

+0

呃,[dev-C++](http://stackoverflow.com/tags/dev-c%2b%2b/info)。 –

+0

不理解downvote。這個問題很容易理解,並且在話題上。由於OP沒有太多的教育,是否發生了downvote?如果是這樣,我們應該減少所有問題。 –

回答

6

在這種情況下,C會自動轉換不同的數字類型。

請參閱Implicit type conversion in C-like languages

+2

C++和java怎麼樣? – wadafarfar

+0

@wadafarfar:你認真嗎?這個問題甚至沒有被標記爲java。即使是這樣,它也不能彌補這個設計不佳和措辭不佳的問題。 – 2011-07-14 17:50:09

3

您聲明一個函數爲int,但從未返回任何內容,也沒有給main返回類型。我會說任何編譯器都會有權拒絕你的代碼。

+1

第一個是技術上允許的,但如果您嘗試*使用*返回的值(它應該有),您將獲得UB。第二個需要診斷--C++不允許隱含的舊C規則。 –

+1

在C++中,即使不使用該值,也可以獲得UB。剛剛流盡的是C++中的UB。 –

-1

具有更小或相等大小的數據類型可以轉換爲更高的數據類型。

相反的情況: 浮點數爲int導致截斷,即小數部分被移除。 雙倍浮動會導致數字四捨五入 長整型爲int會導致多餘的高位被丟棄。

相關問題