终于找到了个问题把聘哥难住了,虽然最后他明白了,但是我也没在他没说之前明白了问题的所在。这个关于宏调用的程序看是简单其实理解起来并不好啊。这个程序里宏调用和函数调用不是同一个概念,函数调用是把实参i传给形参y后自加1,然后输出函数值。因而循环五次,输出1-5的平方值。而在宏调用时,SQR(j++)被替换为(j++)*(j++),先运算后赋值,所以每调用一次宏j会自增2次。第一次宏调用后j的值是sqr(j++)得j=2,(j++)*(j++)此时j=3,因此宏调用和函数调用会有不一样的值。所以不要把宏定义当成函数来用。
#include "stdafx.h"
#define SQR(y)((y)*(y))
int sqr(int y)
{
}
main()
{
}
此时应该用
#define square(x) (x)*(x)
进行替换。