2009-04-18 10 views
5

¿Alguien puede explicar por favor la siguiente línea acerca de los inicializadores designados:inicializadores designados y elementos omitidos

La lista de inicialización puede omitir elementos que se declaran en cualquier lugar en el agregado, en lugar de sólo al final.

Respuesta

2

Probar este link.

La idea es poder hacer referencia a los miembros de un tipo complejo como la estructura durante la inicialización. P.ej.

struct s { 
    int a, b; 
}; 

int main() { 
    struct s = { .b = 42, .a = -42 }; 
    return 0; 
} 

La flexibilidad se obtiene al ser independiente de la orden al especificar los valores. Recuerde que esto se agregó al estándar C99 y es posible que no sea compatible con compiladores que no son compatibles con C99 por completo (o admiten una versión anterior del estándar).

8

Si utiliza una lista initialiser convencional, los valores de los elementos se asignan en orden, por lo que si usted tiene esta estructura:

typedef struct _foo { 
    int a; 
    int b; 
} foo_t; 

entonces este initialiser asigna explícitamente a y no b:

foo_t value = { 7 }; 

sin los inicializadores designados, los únicos elementos que se pueden omitir son los que se han declarado al final

usi ng inicializadores designados, se puede omitir elementos que se declaran en cualquier lugar:

foo_t value = { .b = 8 }; 

modo se omite el inicializador para value.a, a pesar de ser el primer valor de la estructura.

Cuestiones relacionadas