Evaluation order of functions is compiler dependent in C. Hence, it is never safe to depend on the order of evaluation. For example, a function call like below may behave differently from one compiler to another:
rnrn
rnrn
rnvoid func(int, int);
int i = 2;
func(i++, i++);