我碰到這條線的一些代碼來了,找不到的語法定義的任何地方:C類型轉換的替代方法?
*(float *)csCoord.nX = lImportHeight* .04f; /* magic number to scale font size */
如果我刪除f
從.04f
那麼編譯器提供了一個關於可能的數據丟失警告由於從'轉換雙'到'浮動'。我假設f
正在進行某種類型的類型轉換。
有沒有人見過這個? C標準在哪裏定義?
我碰到這條線的一些代碼來了,找不到的語法定義的任何地方:C類型轉換的替代方法?
*(float *)csCoord.nX = lImportHeight* .04f; /* magic number to scale font size */
如果我刪除f
從.04f
那麼編譯器提供了一個關於可能的數據丟失警告由於從'轉換雙'到'浮動'。我假設f
正在進行某種類型的類型轉換。
有沒有人見過這個? C標準在哪裏定義?
尾隨f表示的編譯器,它是一個浮子式文字,就像「」表示一個文字串和L後綴表示一個長整型。
的C++ spec for literals是一樣的。
不知道它在該標準的定義,但您使用的f
指示浮動,否則編譯器假定它是一個雙。同樣,您可以通過添加u
或長l
(小寫ell)等指定要無符號的整數。
沒有「f」,數量0.04是雙精度值。當你用雙倍數的lImportHeight倍數時,你會得到兩倍。然後將其存儲在浮點大小的內存位置,從而失去精度。用「f」,0.04f是一個浮點數字。你用它多重lImportHeight,你會得到一個浮點數;那麼分配不會導致精度損失。
到底是什麼問題?你的編譯器在.04f上窒息嗎?嘗試
(float) .04
不,它編譯罰款。我以前從來沒有見過這種語法,並希望確保我的理解它。 – Tim 2009-02-13 21:32:28