Inicializadores designados y elementos omitidos.

¿Alguien puede explicar la siguiente línea sobre los inicializadores designados?

La lista de inicializadores puede omitir elementos que se declaran en cualquier lugar del agregado, en lugar de solo al final.

Prueba este enlace .

La idea es poder referirse a miembros de una estructura de tipo complejo 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 valores. Recuerde que esto se agregó al estándar C99 y es posible que no sea compatible con comstackdores que no sean totalmente compatibles con C99 (o que admitan una versión anterior del estándar).

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

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

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

 foo_t value = { 7 }; 

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

utilizando los inicializadores designados, puede omitir elementos que se declaran en cualquier lugar:

 foo_t value = { .b = 8 }; 

por lo que se omite el inicializador para value.a , a pesar de ser el primer valor en la estructura.