用函数和宏定义写出来的代码输出来的结果不一样??

这是函数的

#include<stdio.h>
int main()
{
	int i=1;
	int sq(int y);
	while(i<=5)
	{
		printf("%d\n",sq(i++));
	}
}
int sq(int y)
{
	return((y)*(y));
}

然后这是宏定义的

#include<stdio.h>
#define pi(y) ((y)*(y))
int main()
{
	int i=1;
	while(i<=5)
	{
		
		printf("%d\n",pi(i++)); 
	}
 } 

 

宏定义的需要把printf("%d\n", pi(i++)); 变成 printf("%d\n", pi(i)); ++i;

宏定义是一对一替换.

建议用指令  g++ -E xx.c 查看代码差异。

i++ * i++ 和  i * i 不一样

 

多谢,已解决