http://www.embedded.com/shared/printableArticle.jhtml?articleID=9900661
It's not bad (I've seen much worse), but the situation is worse than
that writer seems to think. The code he discusses doesn't just invoke
unspecified behaviour because of order of evaluation issues, it actually
invokes full-blown undefined behaviour, because it modifies an object
_and_ reads it for another purpose, between sequence points. This means
that it cannot just call the function with unexpected values, it can
call the function with random values, with trap representations, not
call it at all, or print the lyrics to the Hedgehog Song and then abort.
Or just abort on a bus error without printing the Hedgehog Song, which
is a plausible effect of such code on suitable hardware, where the
arguments are evaluated in parallel.
Richard