如何转发声明clock_gettime()

How to forward declare clock_gettime()

本文关键字:gettime clock 声明 转发 何转发      更新时间:2023-10-16

我在cpp项目中使用clock_gettime()。但它给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);

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

在你的例子中,只需添加

#define _POSIX_C_SOURCE 199309L

任何include之前,确保包含time.h

(参见手册页的"特性测试宏"部分)

您应该通过包括包含声明的头文件来声明库函数。在本例中为time.h。自己编写声明很容易出错。例如,您将第一个参数声明为int,这与clockid_t不一定相同。

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

你不应该假设"别人"已经包含了你需要的头文件。总是包括你自己使用的每一个头。

编辑:

是的。我已经包括了时间。h

如果是这种情况,那么看起来您的time.h没有声明clock_gettime。你需要再次检查你的c库是否支持POSIX。

因此这个错误是预期的

如果你包含头,那么它是而不是期望clock_gettime没有声明。除非你的c库不支持POSIX。