Deutsch English Français Italiano |
<86zflkp4o2.fsf@linuxsc.com> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Tim Rentsch <tr.17687@z991.linuxsc.com> Newsgroups: comp.lang.c Subject: Re: 80386 C compiler Date: Wed, 27 Nov 2024 16:45:17 -0800 Organization: A noiseless patient Spider Lines: 47 Message-ID: <86zflkp4o2.fsf@linuxsc.com> References: <vhvbhf$28opb$1@dont-email.me> <vhvsm9$2bmq9$1@dont-email.me> <vi0dt1$2el7m$1@dont-email.me> <20241125101701.894@kylheku.com> <qrp9kjd09n2v3srmabqccmnsbr1r6nkm2m@4ax.com> <20241125132021.212@kylheku.com> <875xo9ln93.fsf@nosuchdomain.example.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Date: Thu, 28 Nov 2024 01:45:18 +0100 (CET) Injection-Info: dont-email.me; posting-host="8f1c290f3ddf609884269e518a4a547d"; logging-data="257886"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+R9QPMMr/o8FOf/Ru/XTjTcB8HidoPHko=" User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux) Cancel-Lock: sha1:7t1YXGtPnu3ADz12mketlTOjQkc= sha1:8T4NuF07LEZcG7z7ejCudgc3dqg= Bytes: 2988 Keith Thompson <Keith.S.Thompson+u@gmail.com> writes: > Kaz Kylheku <643-408-1753@kylheku.com> writes: > >> On 2024-11-25, Rosario19 <Ros@invalid.invalid> 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. > > N3096 (C23 draft) has : > """ > The evaluations of the initialization list expressions are > indeterminately sequenced with respect to one another and thus the order > in which any side effects occur is unspecified. > """ > > C23 is more explicit (redundant?) than C99, which doesn't mention the > lack of a sequence point. (C11 dropped sequence points, replacing them > with "sequenced before", "sequenced after", and "unsequenced", basically > a new way of describing the same semantics.) > > Given: > > int n = 42; > int a[] = { n++, n++ }; > > C99 could imply that the value of a is merely unspecified, either { > 42, 43 } or { 43, 42 }. Though it can almost certainly be inferred > from other parts of the C99 standard that there is no sequence > point between the two evaluations of n++ (I haven't taken the time > to check). Under C99 rules, I believe this initializer has undefined behavior, because of more than one modification of an object without an intervening sequence point.