如何在结构中使用ck_列表?
我使用的是这个库,更具体地说,我使用的是如何在结构中使用ck_列表?,c,struct,C,Struct,我使用的是这个库,更具体地说,我使用的是CK_LIST一个多读者单作者链接列表。除了ConcurrentyKit附带的单元测试和回归测试之外,我在网上找不到任何示例或文档,但我自己找到了如何使用CK_LIST,如下所示 #include <stdio.h> #include <stdlib.h> #include <ck_queue.h> struct list_node { void *data; CK_LIST_ENTRY(list_n
CK_LIST
一个多读者单作者链接列表。除了ConcurrentyKit附带的单元测试和回归测试之外,我在网上找不到任何示例或文档,但我自己找到了如何使用CK_LIST
,如下所示
#include <stdio.h>
#include <stdlib.h>
#include <ck_queue.h>
struct list_node
{
void *data;
CK_LIST_ENTRY(list_node) list_entry;
};
static CK_LIST_HEAD(list, list_node) list = CK_LIST_HEAD_INITIALIZER(list);
int main(void)
{
struct list_node *node, *node2;
CK_LIST_INIT(&list);
node = malloc(sizeof(struct list_node));
if(node == NULL)
{
perror("malloc");
return -1;
}
int rtrn = asprintf((char **)&node->data, "test");
if(rtrn < 0)
{
perror("asprintf");
free(node);
return -1;
}
CK_LIST_INSERT_HEAD(&list, node, list_entry);
CK_LIST_FOREACH(node2, &list, list_entry)
{
printf("out: %s\n", node2->data);
}
free(node->data);
free(node);
return 0;
}
那么如何在结构中使用CK\u LIST
编辑
这是编译器的输出
ck_list_test.c:32:18: error: expected expression
data->list = CK_LIST_HEAD_INITIALIZER(data->list);
^
/usr/local/include/ck_queue.h:339:2: note: expanded from macro 'CK_LIST_HEAD_INITIALIZER'
{ NULL }
^
1 error generated.
我相信我找到了答案,只要用
CK\u LIST\u HEAD\u INITIALIZER()
初始化一个结构,然后用指针指向它,就像这样
struct shared_data mapping = { .list = CK_LIST_HEAD_INITIALIZER(mapping->list) };
struct shared_data *map = &mapping;
您会遇到哪些编译器错误?
CK\u LIST\u条目(LIST\u节点)
在struct
中的后预处理输出是什么?我添加了编译器输出,后处理输出是struct LIST{struct LIST\u node*lh\u first;}LIST代码>
struct shared_data mapping = { .list = CK_LIST_HEAD_INITIALIZER(mapping->list) };
struct shared_data *map = &mapping;