案例1: printf("%f",(7/2));
在gcc中的輸出是0.000000。printf在gcc中的錯誤結果
案例2: float k= 7/2;
printf("%f",k);
在gcc輸出是3.000000。
在第一種情況下,printf預計浮點數,但得到整數,所以給出錯誤的結果。但在第二種情況下,它會進行類型轉換。
這裏是我的問題 -
- 爲什麼不給gcc的類型不匹配的錯誤/警告在第一種情況?
- 在第二種情況下,它默認進行類型轉換,但爲什麼不在第一種情況下?
案例1: printf("%f",(7/2));
在gcc中的輸出是0.000000。printf在gcc中的錯誤結果
案例2: float k= 7/2;
printf("%f",k);
在gcc輸出是3.000000。
在第一種情況下,printf預計浮點數,但得到整數,所以給出錯誤的結果。但在第二種情況下,它會進行類型轉換。
這裏是我的問題 -
1)GCC不通過默認勾選類型的格式字符串參數 - 所以「interpretes」的數據(即。在運行時
2)的整數)作爲浮動GCC現在interpretes浮子作爲浮子在運行時。
第二種情況是默認進行類型轉換,但爲什麼不在第一種情況下?
在第一種情況下7
和2
都是int
類型。除以7
由2
將給你一個int
。用%f
打印它將調用未定義的行爲。你會得到任何東西。在這種情況下,沒有類型轉換。
嘗試此
printf("f", (7.0/2));
在第二種情況下是k
類型float
因此的7/2
將結果轉換到默認的類型的k
的。
爲什麼gcc在第一種情況下給出類型不匹配錯誤/警告?
編譯與-Wall
標誌的第一個語句被給予警告:
[Warning] format '%f' expects argument of type 'double', but argument 2 has type 'int' [-Wformat=]
GCC可以發出警告,但您沒有啓用它。嘗試編譯與國旗-Wall
,你會看到:
warning: double format, different type arg (arg 2)
這不是我正在尋找的答案。請仔細閱讀我的問題。 :) – alienCoder
@alienCoder;對不起。現在編輯。查看編輯。 – haccks