背景内容
注意:笔者并未研究printf的实现源码,仅从调用结果分析该问题,如有理解不当之处请指正。
最近使用printf()函数碰到了一个有趣的现象。
int j=0;
printf("[%x][%x][%x][%x]\n",j++,j++,j++,j++); //Result: [3] [2] [1] [0]
原本以为输出结果是[0] [1] [2] [3],没想到结果是:[3] [2] [1] [0]。而,
printf("[%x] [%x] [%x] [%x]\n", j++, j=j+1, j++, j++); //[3] [4] [1] [0]
竟然是[3] [4] [1] [0]。
因此写了一些测试代码,
int \
j=0; printf("[%x] [%x] [%x] [%x]\n", /*row1*/j++, j++, j++, j++); //[3] [2] [1