Path: csiph.com!eternal-september.org!feeder.eternal-september.org!nntp.eternal-september.org!.POSTED!not-for-mail
From: Tim Rentsch
Newsgroups: comp.lang.c
Subject: Re: Are designated initializer supposed to zero padding?
Date: Mon, 11 May 2026 18:15:50 -0700
Organization: A noiseless patient Spider
Lines: 33
Message-ID: <86h5odpgvt.fsf@linuxsc.com>
References: <10tqqso$kn23$1@dont-email.me> <86jytar6n2.fsf@linuxsc.com> <20260511232247.00006c5e@yahoo.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Injection-Date: Tue, 12 May 2026 01:15:53 +0000 (UTC)
Injection-Info: dont-email.me; logging-data="1654897"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+s542LiYDA+oaZtddCgsT/OLHnnVfo+po="; posting-host="714746643ff61f997ea29d517f63563d"
User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Cancel-Lock: sha1:bTSALpeDyFq70Gvw4cwR5HGGcMk= sha1:KhlntPuTAze8rTjH1RyNmwv0KWw= sha256:OQcHuE1jJw9qbff1+kUVWKxK/zx/GYh0NGtOGMD4+Wc= sha1:XNpGU7M6em5ZmNtd/OL27i/G6jM=
Xref: csiph.com comp.lang.c:398789
Michael S writes:
> On Sun, 10 May 2026 20:01:53 -0700
> Tim Rentsch wrote:
>
>> Point 1: initializers are not required to set padding (either
>> padding bits or padding bytes). Don't expect padding to be
>> zeroed. This statement applies to initializers in all forms -
>> regular initializers, designated initializers, and compound
>> literals.
>
> James Kuyper says that zeroing of padding is required by that standard.
> I am not an expert in lawyer-style reading of the standard, but at my
> level it looks that he is correct and the wording in unequivocal.
> For example, n3220, 6.7.11:
>
> 11
> If an object that has automatic storage duration is not initialized
> explicitly, its representation is indeterminate. If an object that has
> static or thread storage duration is not initialized explicitly, or
> any object is initialized with an empty initializer, then it is subject
> to default initialization, which initializes an object as follows:
> ? if it has pointer type, it is initialized to a null pointer;
> ? if it has decimal floating type, it is initialized to positive zero,
> and the quantum exponent is implementation-defined;
> ? if it has arithmetic type, and it does not have decimal floating
> type, it is initialized to (positive or unsigned) zero;
> ? if it is an aggregate, every member is initialized (recursively)
> according to these rules, and any padding is initialized to zero bits;
Sorry, I had missed the crucial last part here, even after I had
looked in multiple editions of the C standard. Mea culpa. Please
see my response to Keith Thompson.