Not by the compiler but by the function being called! and for sprintf etc thats specified as the order in which they are written. Think about it and try "writing" your own sprintf()
You are thinking at too high a level. Down in the intermediate code after parsing, things are often implemented as various stacks and operators. It depends on how the stack works as to the order of teh function calls in function parameters.http://c-faq.com/expr/comma.html
Holmes4, the link has references to the standard.
From K&$II page 63:
The commas that separate function arguments, variables in declarations, etc., are *not* comma operators and do not guarantee left to right evaluation.