如何转发声明 clock_gettime()

How to forward declare clock_gettime()

我在 cpp 项目中使用 clock_gettime()。 但它给出了 clock_gettime() not declared in this scope 错误。 显然,其他人已经包含了 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);

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

相同

Clearly, someone else has already included time.h

您永远不应该假设 "someone else" 包含了您需要的 header。始终包括您使用的每个 header。

编辑:

Yes. i have already included time.h

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

hence this error is expected

如果您确实包含了 header,那么 not 预计不会声明 clock_gettime。除非你的c库不支持POSIX.

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

对于你的情况,只需添加

#define _POSIX_C_SOURCE 199309L

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

(参见联机帮助页的 "Feature Test Macros" 部分)