You are invoking undefined behavior. You have made use of sequence points, usage of which is undefined in C.
You say it seems to print the results expected - it may or it may not, because it is undefined. So the fact that you get the expected values is just pure luck.
As for getting some warnings, please compile and run the code; it will indeed give you a warning:
warning: operation on 'i' may be undefined [-Wsequence-point]
Live demo here.
Besides, if you are thinking why it is just a warning and not an error, then please note that the compiler is in no way bound to report all of your undefined behaviors - its job is just to compile your code, not to point out your undefined behavior.