This question already has answers here:
GCC with -std=c99 complains about not knowing struct timespec

(3个答案)


已关闭6年。




我正在尝试使用clock_gettime()衡量一个函数的运行时间。我包括time.h,我向makefile添加了-lrt,并在Eclipse CDT上添加了正确的路径。但是,当我尝试编译时,会不断出现以下错误:
experiments.c: In function ‘main’:
experiments.c:137:2: error: unknown type name ‘timespec’
timespec time1, time2;
^
experiments.c:139:2: warning: implicit declaration of function ‘clock_gettime’ [-Wimplicit-function-declaration]
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);
^
experiments.c:139:16: error: ‘CLOCK_PROCESS_CPUTIME_ID’ undeclared
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);

我尝试使用的任何类型的CLOCK_都会发生这种情况。我一直在阅读大量的问题/答案和教程,但找不到能够提供帮助的东西。

我包括的标题是:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <time.h>

我在32位Ubuntu 13.10上并使用以下gccCFLAGS上进行编译:-g -Wall -pedantic -std=c99
如果添加标志-D_POSIX_C_SOURCE=199309L,我会得到error: unknown type name ‘timespec’和有关使用timespec的警告。

这是代码的一部分,以防万一:
timespec time1, time2;
int temp;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);
.
.
.
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);
/*code stuff*/
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);

谢谢

最佳答案

thisthis答案放在一起,我就能使它起作用。我必须添加_POSIX_C_SOURCE宏,以确保预处理器正确获取了库功能,我通过在所有包含之前添加以下行来做到这一点:

#define _POSIX_C_SOURCE 199309L

然后我开始出现unknown type name timespec错误,因为您必须明确告诉编译器timespecstruct,所以发生了这种错误。通过编写来解决此问题:
struct timespec time1, time2;

而不是timespec time1, time2;

10-08 09:09