1. C/CPP does not specifiy any order of evaluation of any PART of any expression
==> including function arguments
==> but the sequential order of execution for the expressions is kept strictly
see: Order of evaluation - cppreference.com
also: c++ - function parameter evaluation order - Stack Overflow
2. order of evaluation does not apply to the chained operations such as a + b + c
==> which is really compacted multiple expressions
==> whose sequential execution order depends on the associativity of the operator
see C++ Chain Operations_maxzcl的博客-优快云博客
3. Though the functional arguments do not have defined evaluation order, they
==> have a push order, which is right to left, so that the first argument is on top of the stack; it is done so that variadic function like printf() in C can work properly
see https://cboard.cprogramming.com/cplusplus-programming/92214-stack-push-order-function-arguments.html
==> the declared order of arguments does matter when default arguments are involved; it is usually more convenient to put the most frequently changed arguments at the front