[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Function argument order of evaluation
From: |
Tadeus Prastowo |
Subject: |
Function argument order of evaluation |
Date: |
Mon, 11 Feb 2019 10:53:06 +0100 |
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
- Function argument order of evaluation,
Tadeus Prastowo <=