2011-11-08 12 views
78
static struct fuse_oprations hello_oper = { 
    .getattr = hello_getattr, 
    .readdir = hello_readdir, 
    .open = hello_open, 
    .read = hello_read, 
}; 

No entiendo bien esta sintaxis de C. Ni siquiera puedo buscar porque no conozco el nombre de la sintaxis. ¿Que es eso?¿Qué significa punto (.) En un inicializador de estructura?

+0

Parece un inicializador de estructura. – Mysticial

+6

Normalizado en C99, por lo que no funcionará si tiene un compilador (realmente) antiguo. –

+2

Finalmente encontré el enlace para esto: http://stackoverflow.com/questions/330793/how-to-initialize-a-struct-in-ansi-c – Mysticial

Respuesta

103

Esta es una característica C99 que le permite establecer campos específicos de la estructura por nombre en un inicializador. Antes de esto, el inicializador debía contener solo los valores, para todos los campos, en orden, lo que aún funciona, por supuesto.

Así que para la siguiente estructura:

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

... puede utilizar

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

... o:

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

... o incluso:

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

... aunque los dos últimos son solo para C99.

13

Se conoce como designated initialisation (ver Designated Initializers). Un "inicializador-list", cada uno '.' es un "designator", que en este caso los nombres de un miembro particular de la 'fuse_oprations' struct para inicializar para el objeto designado por la 'hello_oper' identificador.

Cuestiones relacionadas