Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在结构中使用ck_列表?_C_Struct - Fatal编程技术网

如何在结构中使用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;