http://kor.i2p/books/The%20C%20Programming%20Language%20by%20K&R/chapter2.html
The solution, of
course, is to write ++n;
printf("%d %d\n", n, power(2, n)); Function calls, nested assignment statements, and increment and decrement
operators cause ``side effects'' - some variable is changed as a by-product
of the evaluation of an expression. In any expression involving side effects,
there can be subtle dependencies on the order in which variables taking part
in the expression are updated.