#include <stdio.h> void main () { int i=5; //printf ("%d,%d,\n", i,i++), //output 6,5,//printf ("%d,%d,\n", i++,i); //output 6,6,//printf (" %d,%d,\n ", i,++i); //output 6,6,//printf ("%d,%d,\n ", ++i,i); //output 6,6,//printf ("%d,%d,\n ", i++,++ i); //output 6,7,//printf ("%d,%d,\n", ++i,i++) //output 7,5,//printf ("%d,%d,\n", i++,i++); // Output 6,5,//printf ("%d,%d,\n", ++i,++i), //output 7,7,//This is derived: The variable parameter is calculated from right to left, and post-increment (i++) is to first save the I current value, and then self-increment, Then proceed to the left argument. And I and I before self-increment is calculated first. After the calculation is completed sequentially into the stack, so after the self-increment printing is I in the right-to-left calculation process of the current I value, and i,++i final output is the final value of I. Therefore://printf ("%d,%d,%d,%d,\n", ++i,i++,++i,i); //output 8,6,8,8,//printf ("%d,%d,%d,%d,\n", ++i,++i,++i,++i) ; //output 9,9,9,9,//printf ("%d,%d,%d,%d,\n", i++,i++,i++,i++) //output 8,7,6,5,//printf ("%d,%d,%d ,%d,%d,\n ", i++,++i,i,++i,i++); 8,9,9,9,5,}
Calculation Order of variable parameters of printf function under Linux system