2010-09-28 47 views

回答

2

我覺得它使用NVS(Perl的相當於一個C double的),而不是UV的(通常是一個unsigned int),因爲(取決於操作系統和編譯選項),一些在struct statfs值的可能是64位,即使Perl正在使用32位整數。 newSVnv可以工作,因爲C編譯器知道如何將任何整數類型轉換爲double

你應該能夠newSVuv取代newSVnvstatfs任何成員,將適合於紫外線,並讓它工作得很好。 Perl根據需要自動轉換其數字類型。

+0

所以這意味着'newSVnv'被認爲是Perl的自動轉換的''newSVuv'的更安全的版本? – 2010-09-28 23:07:53

+0

我不確定「安全」是什麼意思。 'newSV * v'函數沒有自動轉換(C編譯器除外)。如果你將'long long'傳遞給'newSVuv',那麼當你的C編譯器將'long long'轉換爲'unsigned int'時會發生什麼。 'double'的範圍比任何整數類型都大,所以你不必擔心一個不適合的值。 – cjm 2010-09-28 23:38:17

+0

這是不正確的;許多系統有8個字節的雙精度(有53個精度)和8個字節的整數。將它們存儲在double中可能會失去精度。 – ysth 2010-09-29 02:05:06