我在clock_gettime()
项目中使用cpp
。
但它在此范围错误中未声明clock_gettime()
。
显然,其他人已经包含time.h
,因此预计会出现此错误。
但是我如何转发声明clock_gettime()
?
我试过了int clock_gettime(int,struct timespec *)
?
http://linux.die.net/man/3/clock_gettime,声明如下:
int clock_gettime(clockid_t clk_id, struct timespec *tp);
答案 0 :(得分:2)
自己声明库函数没有意义。在clock_gettime()
中声明time.h
。我想在这里“击中”的是glibc
默认只显示标准C函数。对于其他任何事情(例如POSIX
中的clock_gettime()
),您必须定义相应的宏来实际获取声明。 gcc
会自动为某些宏执行此操作,具体取决于所选模式(例如-std=gnu99
)。
在您的情况下,只需添加
#define _POSIX_C_SOURCE 199309L
在任何包含之前 ,并确保包括time.h
,
(参见联机帮助页的“功能测试宏”部分)
答案 1 :(得分:1)
您应该通过包含包含声明的标头来声明库函数。在这种情况下time.h
。自己编写声明很容易出错。例如,您将第一个参数声明为int
,但不一定与clockid_t
相同。
显然,其他人已经包括time.h
你永远不应该假设“其他人”已经包含了你需要的标题。始终包括您自己使用的每个标题。
编辑:
是。我已经包括time.h
如果是这种情况,那么您的time.h
似乎不会声明clock_gettime
。您需要仔细检查您的c库是否支持POSIX。
因此预计会出现此错误
如果您确实包含标题,那么不期望未声明clock_gettime
。除非你的c库不支持POSIX。