如何转发声明 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" 部分)
我在 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" 部分)