static struct fuse_oprations hello_oper = {
.getattr = hello_getattr,
.readdir = hello_readdir,
.open = hello_open,
.read = hello_read,
};
Nie rozumiem dobrze tej składni C. Nie mogę nawet wyszukiwać, ponieważ nie znam nazwy składni. Co to jest?
c
c99
designated-initializer
Benzoes
źródło
źródło
Odpowiedzi:
Jest to funkcja C99, która umożliwia ustawienie określonych pól struktury według nazwy w inicjatorze. Wcześniej inicjator musiał zawierać tylko wartości dla wszystkich pól w kolejności - co oczywiście nadal działa.
A więc dla następującej struktury:
...możesz użyć
...lub:
...lub nawet:
... chociaż ostatnie dwa dotyczą tylko C99.
źródło
struct demo_s demo = { .first = 1, .first = 9 };
Na jednym z moich GCC zostanie to skompilowane bez ostrzeżenia i najpierw będzie to 9.Są to wyznaczone inicjatory C99 .
źródło
Jest znany jako
designated initialisation
(patrz Wyznaczone inicjatory ). „Lista inicjalizacyjna”, „.
” „ ” jest „designator
”, która w tym przypadku nadaje nazwę konkretnemufuse_oprations
elementowi struktury „ ” do zainicjowania obiektu wyznaczonego przezhello_oper
identyfikator „ ”.źródło
Cała składnia jest znana jako wyznaczony inicjator, jak już wspomniano w COD3BOY i jest ogólnie używana, gdy trzeba zainicjować strukturę w momencie deklaracji do pewnych określonych lub domyślnych wartości.
źródło