Что означает точка (.) В инициализаторе структуры?
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, и обычно используется, когда вам нужно инициализировать вашу структуру во время объявления некоторыми конкретными значениями или значениями по умолчанию.