C错误:存储大小未知

时间:2011-12-23 20:46:23

标签: c

我想在MPI中运行Thimoty的Rolfe实现mergesort,但为了让它正常工作,我需要编译他提供的wallClock.c文件。

#include <time.h>


double wallClock(void)
{
   struct timeval tv;
   double current;

   gettimeofday(&tv, NULL);   // Omit the timezone struct
   current = tv.tv_sec + 1.0e-06 * tv.tv_usec;

   return current;
}

编译时出现以下错误:

wallClock.c:12: error: storage size of ‘tv’ isn’t known

我该如何解决这个问题?

顺便说一句,我将他的#include <sys/time.h>改为#include <time.h>

它产生了以下错误

wallClock.c:15: error: ‘NULL’ undeclared (first use in this function)
wallClock.c:15: error: (Each undeclared identifier is reported only once
wallClock.c:15: error: for each function it appears in.)

我尝试包含stdlib.h(修复NULL未声明的版本)并且出现了更加模糊的错误。

2 个答案:

答案 0 :(得分:17)

  

顺便说一句,我将他的#include <sys/time.h>改为#include <time.h>

错误的举动。 The standard说:

  

<sys/time.h>标头应定义timeval结构   应至少包括以下成员:

time_t         tv_sec      Seconds. 
suseconds_t    tv_usec     Microsecods.

修改

在将time.h更改为sys/time.h并添加stdlib.h之后,我花时间编译了您的代码。我没有错。我在一个相当新的Linux发行版上使用gcc版本4.6.2 20111125。

答案 1 :(得分:3)

理想情况下,您应该使用现代POSIX clock_gettime(使用struct timespec)而不是现已弃用(自2008年起)gettimeofdayclock_gettime / timespec也在<time.h>中定义,因此您已经拥有了几乎所有内容。