web-dev-qa-db-fra.com

Que signifie point (.) Dans un initialiseur struct?

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

Je ne comprends pas bien cette syntaxe C. Je ne peux même pas chercher car je ne connais pas le nom de la syntaxe. Qu'est-ce que c'est?

102
Benjamin

Il s'agit d'une fonctionnalité C99 qui vous permet de définir des champs spécifiques de la structure par nom dans un initialiseur. Avant cela, l'initialiseur devait contenir uniquement les valeurs, pour tous les champs, dans l'ordre - ce qui fonctionne toujours, bien sûr.

Donc pour la structure suivante:

struct demo_s {
  int     first;
  int     second;
  int     third;
};

...vous pouvez utiliser

struct demo_s demo = { 1, 2, 3 };

...ou:

struct demo_s demo = { .first = 1, .second = 2, .third = 3 };

...ou même:

struct demo_s demo = { .first = 1, .third = 3, .second = 2 };

... bien que les deux derniers soient uniquement pour C99.

126
Dmitri

Ce sont les C99 initialiseurs désignés .

20
Dan Aloni

Son connu comme designated initialisation (voir Initialiseurs désignés ). Une "liste d'initialiseurs", chacun '. 'est un "designator" qui dans ce cas nomme un membre particulier du' Fuse_oprations 'struct à initialiser pour l'objet désigné par le' hello_oper 'identifiant.

14
COD3BOY