【问题标题】:Initialize linked list with linux/list.h用 linux/list.h 初始化链表
【发布时间】:2011-11-23 02:59:48
【问题描述】:

我正在使用 linux/list.h 来处理列表,但我无法开始使用。

我一直在根据一些导游的建议尝试不同的组合,但到目前为止没有任何效果。这是我认为是我最接近初始化的尝试:

typedef struct {
    int to;
    struct list_head list;
    int from;
} myFrame;

int main() {
    LIST_HEAD(listInstance);

    myFrame* foo = malloc(sizeof(*foo));
    list_add(&foo->list, &listInstance);
}

这会产生警告

初始化元素在加载时不可计算

在 LIST_HEAD()

但是,this 似乎表明我可以。

或者,列表可以在编译时初始化

有人介意帮我解决这个问题吗?

【问题讨论】:

    标签: c struct initialization


    【解决方案1】:

    你真的想做:

    LIST_HEAD(this_is_a_list_instance);
    

    你可以这样做:

    struct myList *foo = malloc(sizeof(*foo));
    foo->to = 3;
    foo->from = 4;
    list_add(&foo->list, &this_is_a_list_instance);
    

    如果您将其命名为 myObject 而不是 myList,这也可能会更加一致。

    【讨论】:

    • 那么在这种情况下, foo 代表列表中的单个对象? LIST_HEAD() 将采用什么样的参数?我不确定您所说的“this_is_a_list_instance”是什么意思
    • 所以LIST_HEAD(this_is_a_list_list_instance) 是一个将被转换为struct list_head this_is_a_list_instance = ... 的宏。所以我用它作为一个对象的名字。
    • 明白。谢谢你一直陪着我。我在顶部更新了我的问题。
    • 通过将 LIST_HEAD() 移出 main() 来修复。哈哈,好吧
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 2021-08-31
    • 2014-07-03
    • 2021-07-31
    • 2014-11-18
    相关资源
    最近更新 更多