On Wed, Aug 24, 2022 at 3:20 PM Ranier Vilela <ranier.vf@gmail.com> wrote: > But, these same arguments apply to Designated Initializers [1]. > > like: > struct foo a = { > .i = 0, > .b = 0, > }; > > That is slowly being introduced and IMHO brings the same problems with padding bits.
Yep. I don't find that an improvement over a MemSet on the struct either, if we're just using it to fill in zeroes.
If we're using it to fill in non-zero values, though, then there's a reasonable argument that it offers some notational convenience.
Even in that case, it still hides bugs. All arguments against {0} apply entirely to this initialization type. Because the padding bits remain uninitialized.
Note that where all major compilers are correctly initializing padding bits with {0}, then this misbehavior will become of no practical effect in the future.