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

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

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

3 ответа

Решение

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

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

Весь синтаксис известен как назначенный инициализатор, как уже упоминалось COD3BOY, и обычно используется, когда вам нужно инициализировать вашу структуру во время объявления некоторыми конкретными значениями или значениями по умолчанию.

Другие вопросы по тегам