[英]printf in gcc wrong result
案例1: printf("%f",(7/2));
在gcc輸出中是0.000000。
案例2: float k= 7/2;
printf("%f",k);
在gcc輸出是3.000000。
在第一種情況下,printf需要浮點但得到Integer所以給出了錯誤的結果。 但在第二種情況下,它進行類型轉換。
這是我的問題 -
在第二種情況下,它默認進行類型轉換,但為什么不在第一種情況下呢?
在第一種情況下, 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=]
1)gcc默認情況下不會使用參數檢查格式字符串中的類型 - 因此它在運行時將數據(即整數)“解釋”為float
2)gcc現在在運行時將float解釋為float。
海灣合作委員會可以發出警告,但你沒有啟用它。 嘗試用標志-Wall
編譯,你會看到:
warning: double format, different type arg (arg 2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.