zsh-workers
 help / color / mirror / code / Atom feed
From: Roman Perepelitsa <roman.perepelitsa@gmail.com>
To: Bart Schaefer <schaefer@brasslantern.com>,
	zsh workers <zsh-workers@zsh.org>
Subject: Re: [PATCH] unmetafy Re: $var not expanded in ${x?$var}
Date: Thu, 22 Feb 2024 09:34:57 +0100	[thread overview]
Message-ID: <CAN=4vMoxZekcmtvLL=6YpDD17-0ui_mXNv_5H=ZWA1KpVwNfCA@mail.gmail.com> (raw)
In-Reply-To: <20240222072313.7woy5vxvt4fbxyhj@chazelas.org>

On Thu, Feb 22, 2024 at 8:23 AM Stephane Chazelas <stephane@chazelas.org> wrote:
>
> > +             fwrite(unmetafy(dupstring(str), &num), num, 1, file);
>
> Being no C expert, I wonder if it's safe (portable) to set and
> use num in the same call like that. Is it guaranteed to be done
> in the right order?

In C, function arguments are evaluated in unspecified order. The
behavior of the fwrite() call above depends on the evaluation order of
its arguments, and is therefore unspecified.

Evaluation can even be interleaved. Consider:

    a(b(), c(d()))

Here, it is possible that functions will be invoked in this order: d,
b, c. Basically, function arguments are evaluated before the function
is invoked (obviously), but other than that there are no evaluation
order guarantees. Here's another example of unspecified behavior:

    *f() = g();

Here, f() and g() can be evaluated in any order.

There is a related gotcha where the same object is accessed more than
once between sequence points and at least one of these accesses is a
write. Like this:

    int a = 0;
    int b = ++a + a;

Or like this:

    foo(++a, a);

This is undefined behavior, not just unspecified.

Roman.


  parent reply	other threads:[~2024-02-22  8:35 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-13  8:02 Stephane Chazelas
2023-01-16  8:35 ` Daniel Shahaf
2023-01-16 17:15 ` Peter Stephenson
2024-02-20  7:05   ` Stephane Chazelas
2024-02-20 17:45     ` Bart Schaefer
2024-02-20 19:39       ` Stephane Chazelas
2024-02-21  4:44         ` Bart Schaefer
2024-02-21 19:45           ` Stephane Chazelas
2024-02-21 19:52             ` Bart Schaefer
2024-02-21 20:21               ` Stephane Chazelas
2024-02-22  0:46                 ` [PATCH] unmetafy " Bart Schaefer
2024-02-22  7:23                   ` Stephane Chazelas
2024-02-22  7:55                     ` Metafication in error messages (Was: [PATCH] unmetafy Re: $var not expanded in ${x?$var}) Stephane Chazelas
2024-02-22 17:02                       ` Bart Schaefer
2024-02-22 22:31                         ` Bart Schaefer
2024-02-23  0:49                           ` Bart Schaefer
2024-02-23 19:27                           ` Stephane Chazelas
2024-02-23 22:32                             ` Bart Schaefer
2024-02-23 23:38                               ` Bart Schaefer
2024-02-24  9:47                               ` Stephane Chazelas
2024-02-24 10:36                                 ` Stephane Chazelas
2024-02-25  4:35                                   ` [PATCH] 'bad interpreter' error garbled Bart Schaefer
2024-02-25  5:26                                     ` Bart Schaefer
2024-02-25  2:17                                 ` Metafication in error messages (Was: [PATCH] unmetafy Re: $var not expanded in ${x?$var}) Bart Schaefer
2024-02-25  6:05                                   ` Bart Schaefer
2024-02-25  7:29                                     ` Stephane Chazelas
2024-02-25  8:28                                       ` typeset -<non-ASCII> (Was: metafication in error messages) Stephane Chazelas
2024-02-25  8:35                                         ` Stephane Chazelas
2024-02-25 21:02                                         ` Bart Schaefer
2024-02-23  0:33                       ` Metafication in error messages (Was: [PATCH] unmetafy Re: $var not expanded in ${x?$var}) Bart Schaefer
2024-02-25  5:06                       ` [PATCH] count multibyte and metafied characters correctly for math ops errors Bart Schaefer
2024-02-22  8:34                     ` Roman Perepelitsa [this message]
2024-02-22 17:07                       ` [PATCH] unmetafy Re: $var not expanded in ${x?$var} Bart Schaefer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAN=4vMoxZekcmtvLL=6YpDD17-0ui_mXNv_5H=ZWA1KpVwNfCA@mail.gmail.com' \
    --to=roman.perepelitsa@gmail.com \
    --cc=schaefer@brasslantern.com \
    --cc=zsh-workers@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).