Что означает точка (.) В инициализаторе структуры? - PullRequest
99 голосов
/ 08 ноября 2011
static struct fuse_oprations hello_oper = {
  .getattr = hello_getattr,
  .readdir = hello_readdir,
  .open    = hello_open,
  .read    = hello_read,
};

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

Ответы [ 3 ]

125 голосов
/ 08 ноября 2011

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

20 голосов
/ 08 ноября 2011

Это обозначенные C99 инициализаторы .

14 голосов
/ 08 ноября 2011

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

...