Path: csiph.com!weretis.net!feeder9.news.weretis.net!news.quux.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Tim Rentsch Newsgroups: comp.lang.c Subject: Re: 80386 C compiler Date: Wed, 27 Nov 2024 19:26:21 -0800 Organization: A noiseless patient Spider Lines: 26 Message-ID: <86v7w8ox7m.fsf@linuxsc.com> References: <20241125101701.894@kylheku.com> <20241125132021.212@kylheku.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Date: Thu, 28 Nov 2024 04:26:25 +0100 (CET) Injection-Info: dont-email.me; posting-host="8f1c290f3ddf609884269e518a4a547d"; logging-data="423228"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+vpAeBLAlKjeGwPB3ojFNz5W+TIuIPsYU=" User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux) Cancel-Lock: sha1:0SXJqiS/Slbtn8Sq5wDA/6f4M84= sha1:GhDx26pxhdbdGMTrFaM8F92EEEw= Xref: csiph.com comp.lang.c:389160 Kaz Kylheku <643-408-1753@kylheku.com> writes: > On 2024-11-25, Rosario19 wrote: > >> On Mon, 25 Nov 2024 18:23:58 -0000 (UTC), Kaz Kylheku wrote: >> >>> void fn(int a) >>> { >>> int x[3] = { foo(), bar(), a }; /* not in C90 */ >> >> is in the above foo() called before bar()? > > No, you cannot rely on that. Maybe it's fixed in a more recent > standard, but C99 (which I happen to have open in a PDF reader > tab) stated that "The order in which any side effects occur among > the initialization list expressions is unspecified.". This > implies that there is no sequence point between any two > initializing expressions, which means we don't know whose > expression's function call takes place first. Challenge exercise for C standard enthusiasts: It is possible (in C99 and later) to write an initializer for x[] that puts in the same values as the initializer above, but guarantees foo() is called before bar(). Hint: nothing else is needed besides a different writing of the initializer for x[] (still an array of length 3). How to do it?