为什么 gettimeofday return 很奇怪 tv_sec?

Why does gettimeofday return weird 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

为什么会这样?

此致

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

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

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