The compiler will evaluate
printf's arguments in whatever order it happens to feel like at the time. It could be an optimization thing, but there's no guarantee: the order they are evaluated isn't specified by the standard, nor is it implementation defined. There's no way of knowing.
But what is specified by the standard, is that modifying the same variable twice in one operation is undefined behavior.
printf("%d %d %d\n",a++, a,++a); could do a number of things; work how you expected it, work in ways you could never understand.
NOTE:- I have read that evaluation is done right to left in printf. But,The order is unspecified, modifying the same lvalue twice in the same expression (without a sequence point in between) is actually undefined behavior, and can thus do anything at all - including crash.
"I tried my best to explain it. I apologize if it's not clear to you but do let me know if you have any confusion." Thank You . "KEEP CODING" :-)