我想在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未声明的版本)并且出现了更加模糊的错误。
答案 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年起)gettimeofday
。 clock_gettime
/ timespec
也在<time.h>
中定义,因此您已经拥有了几乎所有内容。