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?