gpt4 book ai didi

c - 无法识别 time.h 中定义的宏

转载 作者:太空宇宙 更新时间:2023-11-04 03:19:11 25 4
gpt4 key购买 nike

最初,我想将 struct timeval 转换为 timespec。

起初,这似乎并不困难,因为那里提出了一个解决方案: Is there a standard way to convert a struct timeval into a struct timespec?

TIMEVAL_TO_TIMESPEC 应该可以完成这项工作。

如文档 ( https://www.daemon-systems.org/man/TIMEVAL_TO_TIMESPEC.3.html ) 中所示,它只要求包含 sys/time.h。但是当我尝试编译时我仍然得到相同的答案:`警告:函数'TIMEVAL_TO_TIMESPEC'的隐式声明[-Wimplicit-function-declaration]

我什至尝试编译文档中给出的示例:

#include<time.h>
#include <assert.h>
#include<sys/time.h>

static void example(struct timespec *spec, time_t minutes) {
struct timeval elapsed;

(void)gettimeofday(&elapsed, NULL);

_DIAGASSERT(spec != NULL);
TIMEVAL_TO_TIMESPEC(&elapsed, spec);

/* Add the offset for timeout in minutes. */
spec->tv_sec = spec->tv_sec + minutes * 60;
}

int main(){
return 0;
}

编译时我得到:

test.c: In function ‘example’:
test.c:10:2: warning: implicit declaration of function ‘_DIAGASSERT’ [-Wimplicit-function-declaration]
_DIAGASSERT(spec != NULL);
^
test.c:11:2: warning: implicit declaration of function ‘TIMEVAL_TO_TIMESPEC’ [-Wimplicit-function-declaration]
TIMEVAL_TO_TIMESPEC(&elapsed, spec);
^
/tmp/ccqWnL9I.o: In function `example':
test.c:(.text+0x43): undefined reference to `_DIAGASSERT'
test.c:(.text+0x5b): undefined reference to `TIMEVAL_TO_TIMESPEC'
collect2: error: ld returned 1 exit status

我做错了什么?

最佳答案

您链接到 NetBSD 手册页。不能保证您在那里阅读的内容与 Linux 或任何其他操作系统有任何关系。您在什么操作系统上开发?

看起来宏 glibc 中的标准,它是您在几乎所有 Linux 系统上使用的 C 库。但是,如果您检查 sys/time.h 文件,您会看到宏由 #ifdef 门控:

#ifdef __USE_GNU
/* Macros for converting between `struct timeval' and `struct timespec'. */
# define TIMEVAL_TO_TIMESPEC(tv, ts) { \
(ts)->tv_sec = (tv)->tv_sec; \
(ts)->tv_nsec = (tv)->tv_usec * 1000; \
}
# define TIMESPEC_TO_TIMEVAL(tv, ts) { \
(tv)->tv_sec = (ts)->tv_sec; \
(tv)->tv_usec = (ts)->tv_nsec / 1000; \
}
#endif

因此您需要在包含 sys/time.h 之前#define __USE_GNU 以公开这些宏。正如 @alk 在评论中指出的那样,您可以通过定义 _GNU_SOURCE 来获得更多信息。您可以阅读更多相关信息 here .

关于c - 无法识别 time.h 中定义的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48117253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com