使用{}在C中初始化结构

时间:2016-10-14 08:16:31

标签: c struct initialization

在标记的行中,我收到错误Error - expected expression

#include <stdlib.h>

struct list_head {
    struct list_head *next, *prev;
};

struct program_struct {
    const char *name;
    struct list_head node;
};
typedef struct program_struct program_t;

struct task_t {
    program_t blocked_list;
};

int main() {

    struct task_t *p = malloc(sizeof(*p));
    p->blocked_list.name = NULL;
    p->blocked_list.node = {&(p->blocked_list.node), &(p->blocked_list.node)}; //error

    return 0;
}

我知道我可以用

代替这一行
p->blocked_list.node.next = &(p->blocked_list.node);
p->blocked_list.node.prev = &(p->blocked_list.node);

但我可以使用{}使其工作,就像我在第一段代码中尝试过一样吗?

1 个答案:

答案 0 :(得分:2)

只有在定义变量时才允许初始化。因此,您无法在分配中使用初始值设定项。 您可以使用C99&#39; compound literals

p->blocked_list.node = (struct list_head) {&(p->blocked_list.node), &(p->blocked_list.node)}; //error