'tzp'的存储大小未知

时间:2014-08-25 09:38:57

标签: c

所以我尝试使用这段代码进行基准测试:

#include <time.h>
#include <sys/time.h>
#include <sys/resource.h>

double get_time()
{
    struct timeval t;
    struct timezone tzp;
    gettimeofday(&t, &tzp);
    return t.tv_sec + t.tv_usec*1e-6;
}

但出于某种原因,我不断收到此错误

error: storage size of ‘tzp’ isn’t known
warning: unused variable ‘tzp’

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:5)

您定义了_XOPEN_SOURCE=500。根据{{​​3}},第二个参数的类型为void*,且必须为NULL

int gettimeofday(struct timeval *tp, void *tzp);
     

[..]

     

如果tzp不是空指针,则行为未指定。

如果你想要linux手册中指定的原型,你需要

#define __USE_BSD

但是,如果您传递NULL以外的任何内容,则会返回错误。

答案 1 :(得分:1)

你可以摆脱&#39; tzp&#39;变量

来自gettimeofday手册页:

If either tv or tz is NULL, the corresponding structure is not set or returned.

The use of the timezone structure is obsolete; the tz argument should normally be specified as NULL.

所以你的代码应该是这样的:

#include <time.h>
#include <sys/time.h>
#include <sys/resource.h>

double get_time()
{
    struct timeval t;
    gettimeofday(&t, NULL);
    return t.tv_sec + t.tv_usec*1e-6;
}