From mboxrd@z Thu Jan 1 00:00:00 1970 MIME-Version: 1.0 References: <43a5572d-ea50-41a8-9897-9900f13c5a00@www.fastmail.com> In-Reply-To: From: "Devon H. O'Dell" Date: Tue, 2 Apr 2019 09:18:59 -0700 Message-ID: To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Subject: Re: [9fans] Don't Plan 9 C compiler initialize the rest of member of a struct? Topicbox-Message-UUID: f8747fcc-ead9-11e9-9d60-3106f5b1d025 Also worth noting that any padding bits are zeroed as well for aggregate and union types. Not just setting all pointer values to NULL and arithmetic types to positive or unsigned zero. Op di 2 apr. 2019 om 08:17 schreef Skip Tavakkolian : > > like this: > > #include > #include > > struct option { > int n; > char *s; > int flags; > }; > > > int main(void) > { > struct option opt =3D { 1, "test" }; > static struct option opt2; > > printf("%d %s %x\n", opt.n, opt.s, opt.flags); > printf("%x\n", opt2.flags); > return 0; > } > > > On Tue, Apr 2, 2019 at 8:02 AM Skip Tavakkolian wrote: >> >> I interpret it as: initialize it like a static variable. >> >> On Tue, Apr 2, 2019 at 7:53 AM Kyohei Kadota wrote: >>> >>> Thank you for a reply. >>> >>> I read spec on http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pd= f >>> then I'm confusing. >>> This spec describes Initialization: >>> >>> > 6.7.8 Initialization, p127 >>> > >>> > 19 The initialization shall occur in initializer list order, each ini= tializer provided for a >>> > particular subobject overriding any previously listed initializer for= the same subobject;132) >>> > all subobjects that are not initialized explicitly shall be initializ= ed implicitly the same as >>> > objects that have static storage duration. >>> >>> What is "be initialized implicitly the same as objects that have >>> static storage duration" mean? >>> >>> 2019=E5=B9=B44=E6=9C=882=E6=97=A5(=E7=81=AB) 9:27 Jeremy O'Brien : >>> > >>> > On Mon, Apr 1, 2019, at 11:33, Kyohei Kadota wrote: >>> > > Hi, 9fans. I use 9legacy. >>> > > >>> > > About below program, I expected that flags field will initialize to >>> > > zero but the value of flags was a garbage, ex, "f8f7". >>> > > Is this expected? >>> > > >>> > > ``` >>> > > #include >>> > > >>> > > struct option { >>> > > int n; >>> > > char *s; >>> > > int flags; >>> > > }; >>> > > >>> > > int >>> > > main(void) >>> > > { >>> > > struct option opt =3D {1, "test"}; >>> > > printf("%d %s %x\n", opt.n, opt.s, opt.flags); >>> > > return 0; >>> > > } >>> > > ``` >>> > > >>> > > >>> > >>> > According to C99: "If an object that has automatic storage duration i= s not initialized explicitly, its value is indeterminate." >>> > >>> > Stack variable =3D=3D automatic storage duration. This appears to be = correct behavior to me. >>> > >>>