Designated Initialization in C
With designated initialization, each designator names a direct non-static data member (or a struct
), like so:
struct A { int x; int y; int z; }; struct A a1 = {.x = 1, .y = 2}; struct A a2 = {.y = 1, .x = 2}; // valid C, invalid C++ (out of order)Out-of-order designated initialization, nested designated initialization, mixing of designated initializers and regular initializers, and designated initialization of arrays are all supported in the C programming language, but are not allowed in C++.
struct A { int x, y; }; struct B { struct A a; }; struct A a = {.y = 1, .x = 2}; // valid C, invalid C++ (out of order) int arr[3] = {[1] = 5}; // valid C, invalid C++ (array) struct B b = {.a.x = 0}; // valid C, invalid C++ (nested) struct A a = {.x = 1, 2}; // valid C, invalid C++ (mixed)