dot(。)在struct初始化程序中的含义是什么?

时间:2011-11-08 07:38:56

标签: c c99 designated-initializer

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

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

4 个答案:

答案 0 :(得分:123)

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

答案 1 :(得分:20)

这些是C99的designated initializers

答案 2 :(得分:14)

它被称为designated initialisation(见Designated Initializers)。一个“初始化列表”,每个“.”是一个  “designator”在这种情况下命名一个特定的成员  'fuse_oprations'结构初始化为指定的对象  “hello_oper”标识符。

答案 3 :(得分:0)

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