Если вы используете обычный список инициализаторов, значения для элементов присваиваются по порядку, поэтому, если у вас есть такая структура:
typedef struct _foo {
int a;
int b;
} foo_t;
тогда этот инициализатор явно присваивает a
, а не b
:
foo_t value = { 7 };
без обозначенных инициализаторов, единственные элементы, которые могут быть пропущены, это элементы, объявленные в конце
используя назначенные инициализаторы, вы можете опустить элементы, которые объявлены где угодно:
foo_t value = { .b = 8 };
поэтому инициализатор для value.a
опущен, несмотря на то, что он является первым значением в структуре.