Can anybody please explain the following line about the designated initializers:
The initializer list can omit elements that are declared anywhere in the aggregate, rather than only at the end.
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.
Try this link.
The idea is to be able to refer to members of a complex type like structure during initialization. E.g.
struct s {
int a, b;
};
int main() {
struct s = { .b = 42, .a = -42 };
return 0;
}
The flexibility is gained from being order independent when specifying values. Remember this was added to the C99 standard and may not be supported by compilers which do not support C99 fully (or support an earlier version of the standard).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With