help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Function argument order of evaluation


From: YUE Daian
Subject: Re: Function argument order of evaluation
Date: Mon, 11 Feb 2019 22:54:31 +0800

On 2019-02-11 10:53, Tadeus Prastowo <tadeus.prastowo@unitn.it> wrote:
> Hello,
>
> In C/C++, the following code has an undefined behavior (UB):
>
> int my_var = 1;
> my_function((my_var = 10), 2 * my_var);
>
> It is because their respective standards do not specify that the
> assignment `(my_var = 10)' as the first argument must be evaluated
> before the second argument `2 * my_var' is evaluated.  So,
> `my_function' can see as its arguments either `10' and `20' or `10'
> and `2'.  Compiling the following code with GCC 5.5 that comes with
> Ubuntu 16.04 gives the latter:
>
> #include <stdio.h>
> void my_function(int a, int b) {
>   printf("%d, %d\n", a, b);
> }
> int main() {
>   int my_var = 1;
>   my_function((my_var = 10), 2 * my_var);
>   return 0;
> }
>
> Does Emacs Lisp behave the same or does it provide a guarantee that
> the function arguments are always evaluated from left to right?
>
> I have searched Emacs Lisp manual and the archive of this mailing list
> for the keyword "order of evaluation" but have not found the answer.
> So, I ask directly here.  Sorry if I might have missed the obvious.
>
> Thank you for your kind help.
>
> --
> Best regards,
> Tadeus

Hi Tadeus,

>From the Emacs Lisp reference:
...then the forms in the function body are evaluated in order, and the
value of the last body form becomes the value of the function call.

You see, the forms in the function body are evaluated *in order*.

I think it can be treated as a guarantee? ;-)

Reference:
https://ftp.gnu.org/old-gnu/Manuals/elisp-manual-20-2.5/html_chapter/elisp_9.html#SEC114

Danny



reply via email to

[Prev in Thread] Current Thread [Next in Thread]