2015-05-12 69 views
0

我有一個應用程序調用gettimeofday來存儲代碼的該部分開始運行的tv_sec。這段代碼很簡單:爲什麼gettimeofday返回奇怪的tv_sec?

struct timeval tvnow; 
gettimeofday(&tvnow); 
int initialTime = tvnow.tv_sec; 

它通常工作正常,但有時我得到意想不到的結果,如

tvnow = {tv_sec = 1024, tv_usec = 0} 
initialTime = 1401591 

或者

tvnow = {tv_sec = 1024, tv_usec = 0} 
initialTime = 2439903 

爲什麼會這樣呢?

問候

+0

如果將'int initialTime'更改爲'time_t initialTime',會發生什麼?我的猜測是你在64位計算機上,它正在溢出整數。 –

+0

發表你如何確定'initialTime'的值是'1401591'。 – chux

回答

0

要調用gettimeofday()數錯誤的論點。由此產生的行爲是未定義的。如果你不希望時區信息,然後通過NULL作爲第二個參數:

struct timeval tvnow; 
gettimeofday(&tvnow, NULL); 
int initialTime = tvnow.tv_sec; 

我要去假設,不知怎的,你包括標頭包括struct timeval定義的組合(或者你提供你自己的定義),但不是gettimeofday()的原型。如果在函數調用時可以看到正確的原型,那麼代碼就不應該編譯。如果你的編譯器沒有發出關於缺少原型的警告,那麼你應該弄清楚如何讓它這樣做(並且總是以這種方式編譯),或者得到一個更好的編譯器。