It is common for C to provide several different ways to do something, all of which are exactly equivalent. For example, given that x is a normal int variable:
x = x + 1;
is exactly equivalent to:
x += 1;
or
x++;
The only possible difference is that a less capable compiler might generate slightly better code for the second and third options [which would be a hint that getting a better compiler would be worthwhile].
However, sometimes constructs that appear to be equivalent have very subtle differences … (more…)