gpt4 book ai didi

C 编程 #define struct { } 声明

转载 作者:太空狗 更新时间:2023-10-29 14:50:37 25 4
gpt4 key购买 nike

我正在查看 Glibc 代码。 glibc 队列的一些代码引起了我的注意。我无法为这个结构定义赋予意义。该结构没有名称。为什么?它是如何工作的?

#define LIST_ENTRY(type)                        \
struct { \
struct type *le_next; /* next element */ \
struct type **le_prev; /* address of previous next element */ \
}

Source

最佳答案

这实际上是一个预处理器宏,可以在其他地方扩展(很可能带有尾随名称)。

在该头文件开头的注释中有对 queue(3) man page 的引用包含有关该宏和其他宏的更多详细信息:

The macro LIST_ENTRY declares a structure that connects the elements in the list.

以及一个使用示例:

LIST_HEAD(listhead, entry) head = LIST_HEAD_INITIALIZER(head);  
struct listhead *headp; /* List head. */
struct entry {
...
LIST_ENTRY(entry) entries; /* List. */
...
}
*n1, *n2, *n3, *np, *np_temp;

LIST_INIT(&head); /* Initialize the list. */

n1 = malloc(sizeof(struct entry)); /* Insert at the head. */
LIST_INSERT_HEAD(&head, n1, entries);

作为这个 C 代码(不是 C++),并且 C 缺少模板,这个预处理器宏可以用来“模拟”模板(注意 type 参数)。

关于C 编程 #define struct { } 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41983469/

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