Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c > #389157
| From | Tim Rentsch <tr.17687@z991.linuxsc.com> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: 80386 C compiler |
| Date | 2024-11-27 16:45 -0800 |
| Organization | A noiseless patient Spider |
| Message-ID | <86zflkp4o2.fsf@linuxsc.com> (permalink) |
| References | (2 earlier) <vi0dt1$2el7m$1@dont-email.me> <20241125101701.894@kylheku.com> <qrp9kjd09n2v3srmabqccmnsbr1r6nkm2m@4ax.com> <20241125132021.212@kylheku.com> <875xo9ln93.fsf@nosuchdomain.example.com> |
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.
Back to comp.lang.c | Previous | Next | Find similar
Re: 80386 C compiler Tim Rentsch <tr.17687@z991.linuxsc.com> - 2024-11-27 16:45 -0800
csiph-web