I used to think that in C99, even if the side-effects of functions f
and g
interfered, and although the expression f() + g()
does not
See Annex C for a list of sequence points. Function calls (the point between all arguments being evaluated and execution passing to the function) are sequence points. As you've said, it's unspecified which function gets called first, but each of the two functions will either see all the side effects of the other, or none at all.