165 votes

Que signifie point (.) Dans un initialiseur de structure?

 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. Je ne peux même pas chercher parce que je ne connais pas le nom de la syntaxe. Qu'est-ce que c'est?

184voto

Dmitri Points 4021

Ceci est 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 pour C99 seulement.

26voto

Dan Aloni Points 2198

Ce sont les initialiseurs désignés par C99.

18voto

COD3BOY Points 7466

Il est connu sous le nom de designated initialisation (voir Initializers désignés ). Une "liste d'initialisation", Chaque ' . ' est un " designator " qui, dans ce cas, désigne un membre particulier de la structure ' fuse_oprations ' à initialiser pour l'objet désigné par l'identifiant ' hello_oper '.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X