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

Ben*_*min 107 c c99 designated-initializer

static struct fuse_oprations hello_oper = {
  .getattr = hello_getattr,
  .readdir = hello_readdir,
  .open    = hello_open,
  .read    = hello_read,
};
Run Code Online (Sandbox Code Playgroud)

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

Dmi*_*tri 132

这是一个C99功能,允许您在初始化程序中按名称设置结构的特定字段.在此之前,初始化程序需要按顺序包含所有字段的值 - 当然,这仍然有效.

所以对于以下结构:

struct demo_s {
  int     first;
  int     second;
  int     third;
};
Run Code Online (Sandbox Code Playgroud)

...您可以使用

struct demo_s demo = { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)

...要么:

struct demo_s demo = { .first = 1, .second = 2, .third = 3 };
Run Code Online (Sandbox Code Playgroud)

...甚至:

struct demo_s demo = { .first = 1, .third = 3, .second = 2 };
Run Code Online (Sandbox Code Playgroud)

......虽然最后两个仅适用于C99.

  • 似乎确实如此,但仅适用于 C++20,只需查看文档即可。这是 C 的 cppreference.com 文档(自 C99 起有效):https://en.cppreference.com/w/c/language/struct_initialization,以及 C++(仅适用于 C++20):https://en .cppreference.com/w/cpp/language/aggregate_initialization。 (3认同)
  • 点初始化在 C++ 中也能工作吗?(我需要测试一下) (2认同)

COD*_*BOY 14

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