I just tested int a=10 printf("a=%d a++=%d ++a=%d",a, a++,++a); The gcc's output is: a=12 a++=10 ++a=12 How to explain this? No matter which direction, the arguments are pushed into the stack, this result is not reasonable.