web-dev-qa-db-ja.com

構造体初期化子でドット(。)はどういう意味ですか?

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

私はこのC構文をよく理解していません。構文の名前がわからないため、検索することさえできません。あれは何でしょう?

102
Benjamin

これは、構造体の特定のフィールドを初期化子で名前で設定できる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 };

...最後の2つはC99専用です。

126
Dmitri

これらはC99の 指定された初期化子 です。

20
Dan Aloni

designated initialisation指定された初期化子 を参照)。 「初期化リスト」、各 '. 'は「designator」であり、この場合、「Fuse_oprations 'で指定されたオブジェクトを初期化する構造体' hello_oper '識別子。

14
COD3BOY