这样的(i++)*(i++)的形式,不同编译器不同的解释,会得到不同的结果,还是不去研究为上策,这题也就书本上才有,实际中不可能这么写。
下面是我的理解,供参考:
POWER(i++)的宏展开是 (i++) *(i++) ,
首先第一次循环,i=1, 第一次的宏展开,其中一个i++的值为1,然后另外一个i++的值为2(这是前一次i++,然后这里再取i的值的结果),所以第一次打印2;
然后第二次循环,第二次宏展开, 同理其中一个i++变为3(这是第一次宏展开的第二次i++,然后再取i的值后的结果),然后另外一个i++变为4(这是在前一次i++后再取一次值的结果),所以第二次打印4.
然后依据前一次i++,然后while循环再取i的值变为了5,所以退出while循环。