深入探討:為什麼Printf() 將浮點數提升為雙精確度浮點數
Printf() 之所以將float 參數提升為double,不只是因為它是一個變參函數。根據 C 標準和 C 標準,所有變參函數的 float 參數都會在傳遞之前提升為 double。
C99 標準第6.5.2.2 節明確規定:"[...]浮點型參數提升為double。這些稱為預設參數提升。[...]"
C 標準草案第5.2.2節也闡明:"[...]浮點類型參數若受浮點提升(4.6)的影響,則在呼叫之前,參數值會轉換為提升後的型別。[...]"
此外,第4.6 節指出:"float 類型的pr 值可以轉換為double 類型的pr 值。值保持不變。"
Cppreference 很好地總結了 C中變參函數的預設轉換:"
在C 語言中,這種轉換是出於對K&R C 的兼容性考慮。中明確指出:"為了與過去的實踐兼容,在沒有原型聲明的情況下,所有參數提升都按K&R 描述的那樣進行,包括float 到double的提升。 "
以上是為什麼 Printf() 將浮點數提升為雙精度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!