atof()
返回一個double,當我將它賦值給一個浮點值(並且是的,我明確地必須使用float)時會產生警告。atof()for float而不是double
所以我的問題:是否有一個atof()
- 變量可用返回一個純浮點數?或者我必須通過演員來解決這個問題 - 這很遺憾,因爲它會浪費資源來創建一個會立即拋棄的雙重資源。
atof()
返回一個double,當我將它賦值給一個浮點值(並且是的,我明確地必須使用float)時會產生警告。atof()for float而不是double
所以我的問題:是否有一個atof()
- 變量可用返回一個純浮點數?或者我必須通過演員來解決這個問題 - 這很遺憾,因爲它會浪費資源來創建一個會立即拋棄的雙重資源。
改爲使用strtof
,它將返回一個浮點數。
問題標記爲[ansi-c]。根據[此參考資料](http://en.cppreference.com/w/c/string/byte/strtof),在C99中增加了「strtof」,因此您在編譯器上是否存在該功能。 (順便說一下,www.cplusplus.com是一個C語言問題的參考資料) – user694733
如果平臺有直接的「字符串浮動」轉換例程和編譯器的優化,一定會打電話經由轉換例程:
char *buf = ...
float y;
if (sscanf(buf, "%f", &y) == 1) Success();
如果沒有,則使用
float y = (float)atof(buf);
注意,第二可以通過編譯器進行優化,以所謂的「串漂浮」,如果它違反了微妙double rounding,否則與此第二個代碼發生。
真的沒關係。如果將結果賦給一個變量,那麼不管你是否使用它,都不會使用更多的內存,並且編譯器可能會有一些很好的優化函數,這些函數都可以忽略不計。不要做過早的優化,首先集中精力編寫好的可讀和可維護的代碼。 –
除非你在一個帶有軟件浮點的嵌入式平臺上,否則你的CPU很可能將所有浮點值存儲在雙倍大小的寄存器中。 – Art
爲了記錄,我在看這個問題,因爲我在一個嵌入式平臺上使用硬件單精度和軟件雙精度浮點數。 – ojs