If you use a conventional initialiser list, the values for the elements are assigned in order, so if you have this struct:
typedef struct _foo {
int a;
int b;
} foo_t;
then this initialiser explicitly assigns a
and not b
:
foo_t value = { 7 };
without designated initialisers, the only elements which can be omitted are the ones declared at the end
using designated initialisers, you can omit elements that are declared anywhere:
foo_t value = { .b = 8 };
so the initialiser for value.a
is omitted, despite being the first value in the struct.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…