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

我不太了解这种 C 语法。我什至无法搜索,因为我不知道语法的名称。那是什么?

4

4 回答 4

173

这是一个 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。

于 2011-11-08T07:48:47.050 回答
25

这些是 C99 的指定初始化器

于 2011-11-08T07:45:52.047 回答
17

它被称为designated initialisation(参见指定初始化程序)。一个“初始化器列表”,每个“ .”都是一个“ designator”,在这种情况下,它命名了一个“”结构的特定成员,以便为由“ ”标识符fuse_oprations指定的对象进行初始化。hello_oper

于 2011-11-08T07:47:32.810 回答
-1

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

于 2020-04-20T08:38:21.043 回答