ANSI C explicitly refuses to make any guarantees about the order of argument evaluation for a n-ary operation. Therefore having
y = j++ + ++j
..you might end up with a logical equivalent of one of the following:
x1 = j++; x2 = ++j; y = x1 + x2
..or
x1 = ++j; x2 = j++; y = x1 + x2
depending on compiler, compiler version, OS, and even compilation flags. More complex expressions make things progressively more messy.