The following code gives 7 when compiled with gcc. I think, the value of the three phase "++i" should be 1, 2, 3, although the order may be different. So, the sum of them should be 6. I have confirmed that it gives 6 when compiled with clang. I know that a program having common sense will not write code like this, but I still can not understand this behavior of gcc. /******************************************/ #include <stdio.h> int main() { int i = 0; printf("%d\n", (++i) + (++i) + (++i)); return 0; }