-1

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);

4

2 回答 2

2

自己声明库函数没有意义。clock_gettime() 在中声明time.h。我想在这里“击中”你的是,glibc默认情况下只会使标准 C 函数可见。对于其他任何事情(例如POSIX在 的情况下clock_gettime()),您必须定义相应的宏才能实际获得声明。gcc根据选择的模式(例如-std=gnu99)自动对某些宏执行此操作。

在您的情况下,只需添加

#define _POSIX_C_SOURCE 199309L

任何包含并确保time.h包含之前,都应该这样做。

(请参阅手册页的“功能测试宏”部分)

于 2015-09-16T12:25:09.990 回答
1

您应该通过包含包含声明的标头来声明库函数。time.h在这种情况下。自己编写声明很容易出错。例如,您将第一个参数声明为int不一定与clockid_t.

显然,其他人已经包含了 time.h

你永远不应该假设“其他人”已经包含了你需要的标题。始终包含您自己使用的每个标题。

编辑:

是的。我已经包含了 time.h

如果是这种情况,那么您time.h似乎没有声明clock_gettime. 您需要仔细检查您的 c 库是否支持 POSIX。

因此这个错误是预期的

如果您确实包含了标头,那么它不会clock_gettime声明。除非你的 c 库不支持 POSIX。

于 2015-09-16T12:20:36.867 回答