0

我有一个应用程序调用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

为什么会发生这种情况?

问候

4

1 回答 1

1

gettimeofday()使用错误数量的参数调用。产生的行为是未定义的。如果您不想要时区信息,则NULL作为第二个参数传递:

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

我将假设您以某种方式包含包含定义的标题组合struct timeval(或者您提供自己的定义),但不是gettimeofday(). 如果在函数调用点有一个正确的原型可见,那么代码根本不应该编译。如果您的编译器没有发出关于缺少原型的警告,那么您应该弄清楚如何使它这样做(并始终以这种方式编译),或者获得更好的编译器。

于 2015-05-12T15:18:07.117 回答