What does dot (.) mean in a struct initializer?

static struct fuse_oprations hello_oper = {
.getattr = hello_getattr,
.readdir = hello_readdir,
.open    = hello_open,
.read    = hello_read,
};

I don't understand this C syntax well. I can't even search because I don't know the syntax's name. What's that?

43389 次浏览

它被称为 designated initialisation(参见 指定初始化器)。一个“初始化器列表”,每个‘ .’是一个 “ designator”,在这种情况下,它指定 指定的对象的初始化 “ hello_oper”标识符。

这是一个 C99特性,允许您在初始化器中按名称设置结构的特定字段。在此之前,初始化器只需要按顺序包含所有字段的值——当然,这仍然可以工作。

因此,对于以下结构:

struct demo_s {
int     first;
int     second;
int     third;
};

你可以利用

struct demo_s demo = { 1, 2, 3 };

或者:

struct demo_s demo = { .first = 1, .second = 2, .third = 3 };

甚至..:

struct demo_s demo = { .first = 1, .third = 3, .second = 2 };

不过最后两个是 C99专用的。

正如 COD3BOY 已经提到的那样,整个语法被称为指定初始化程序,当您需要在声明时将结构初始化为某些特定值或默认值时,通常会使用它。