现在的位置: 首页 > 综合 > 正文

c语言 函数调用和函替换的区别。

2013年12月02日 ⁄ 综合 ⁄ 共 457字 ⁄ 字号 评论关闭

终于找到了个问题把聘哥难住了,虽然最后他明白了,但是我也没在他没说之前明白了问题的所在。这个关于宏调用的程序看是简单其实理解起来并不好啊。这个程序里宏调用和函数调用不是同一个概念,函数调用是把实参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)
{
 return ((y)*(y));
}
main()
{
 int i,j;
 for (i=1,j=1;j<=5;)
 {
  printf("%d\n",sqr(i++));
  printf("%d\n",SQR(j++));
 }
}


此时应该用

#define square(x)  (x)*(x)

进行替换。

抱歉!评论已关闭.