1. ホーム
  2. c

[解決済み] 構造体イニシャライザーにおけるドット(.)の意味とは?

2022-05-05 04:41:33

質問

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

このC言語の構文がよくわからない。構文名が分からないから検索もできない。なんだこれ?

どのように解決するのですか?

これは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専用です。