From: Johannes Sixt Date: Sun, 14 Jul 2019 08:30:27 GMT Subject: Re: [PATCH] range-diff: fix some 'hdr-check' and sparse warnings Message-ID: <54c2ee44-ee99-ea4a-3154-f642e0060877@kdbg.org> In-Reply-To: <20190714005129.GA4525@sigill.intra.peff.net> Am 14.07.19 um 02:51 schrieb Jeff King: > I wonder if we could come up with a definition of INIT_ZERO such that: > > struct foo bar = { INIT_ZERO }; > > worked everywhere. IMHO that is more readable than "{}" anyway. Not when = {} becomes a well-established way to express zero-initialization. At that point, your suggested macro would obfuscate the construct. > But it does seem a real shame there is no way to say "zero-initialize > this struct" in C without providing at least a single member value. Indeed. For this reason, I'm arguing for the second-best form that places a 0 between the braces. > Ordering struct definitions to put an arithmetic type at the start is an > OK workaround (to just let "0" work everywhere). Why would you re-order members? There's nothing wrong when a pointer is initialized by 0. > But it does fall down > when the first element _has_ to be a struct (like, say, any user of our > hashmap.[ch] interface). No, it does not. It is not necessary to spell out nested structs in the initializer. -- Hannes