Что означает точка (.) В инициализаторе структуры?

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

Я не очень хорошо понимаю этот синтаксис C. Я даже не могу выполнить поиск, потому что не знаю имени синтаксиса. Что это?

Ответ 1

Это функция 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.

Ответ 3

Его называют designated initialisation (см. Назначенные инициализаторы). "Инициализатор-список", каждый "." является   "designator", который в этом случае называет определенный член  'fuse_oprations' для инициализации объекта, указанного в  идентификатор hello_oper.