2012-12-13 301 views
17

我有2個類型爲time_t的變量 - varEnd和varStart。 現在,爲了看到他們 要麼之間的區別我可以做difftime和' - '有什麼區別?

varEnd - varStart; 

difftime(varEnd, varStart); 

和兩個返回的秒數。

請讓我知道,如果他們有任何區別?或者哪個是推薦的?

+2

爲什麼被標記爲「C++」? –

+0

@PaulR:''difftime()'存在於C和C++中。 –

+1

那麼你也可以稱它爲Pascal或FORTRAN,但它並不是Pascal或FORTRAN問題。 ;) –

回答

27

該語言指定time_t是一種能夠表示時間的算術類型。它並不要求它以任何特定的方式代表時間。

如果time_t表示時間爲自某個時刻以來的秒數,則-運算符將正確計算兩個time_t值之間的差值(秒)。

如果不是這樣(例如,如果粒度是一毫秒,或者time_t的位被劃分成代表年,月,日等的組),那麼運算符可以產生無意義的結果。

另一方面,difftime()函數「知道」time_t代表一個時間,並使用該信息計算以秒爲單位的差異。

在大多數的實現,簡單的減法和difftime()碰巧做同樣的事情 - 但只有difftime()是保證在所有實現正常工作。

另一個區別:difftime()返回浮點類型double的結果,而"-"time_t值產生time_t類型的結果。在大多數情況下,結果將隱式轉換爲您分配的類型,但如果time_t碰巧是無符號整數類型,則從較早時間減去較晚時間將產生非常大的值而不是負值。我見過的每個系統都使用time_t作爲32位或64位有符號整數類型,但允許使用無符號類型 - 還有一個原因,即簡單減法time_t值不是必需的。

1

difftime()返回一個浮點數double,只是減去它們不會除非您先將它們轉換爲double。
來源:here

+0

是的,但是在減去它們之前,即使將'time_t'操作數轉換爲'double'也不能保證與'difftime'做同樣的事情 - 這就是爲什麼'difftime'存在的原因。看到我的答案。 –