As other commenters have pointed out, those are designated initializers[1], one of my favorite C99 feature.
I's also been picked up recently for inclusion into C++20[2].
However, it seems that C++ adds a specific limitation:
> all designators used in the expression must appear in the same order as the data members of T
> 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++
Which limits the usefulness, as I've used this syntax to let myself reorder struct fields (and add some) without breaking the API (while obviously breaking the ABI). It's a great tool to use while your API is still in flux.
At least an error will be produced, which is much better than just providing values and hoping that the API/ABI remains stable.
[1]: https://en.cppreference.com/w/c/language/struct_initializati...
[2]: https://en.cppreference.com/w/cpp/language/aggregate_initial...