宏定义的本质是编译前替换。也就是说在编译预处理结束,真正进入编译之前你的程序while(i<=4) printf("%d\t",POWER(i++));会变为while(i<=4) printf("%d\t",((i++)*(i++)));这样每次while循环会使i+2;所以程序的输出为1 9
power(i++)执行时先计算i的平方,并返回,再增加i,所以输出的结果是1 4 9 16 printf中的"%d\t" 表示输出时按照十进制输出,没输出一个数后跟一个制表符