宏函数和普通函数的区别

#define S(a,b) a*b


area=S(3,2)

int S(int a,int b)
{ int s;
  s=a*b;
  return(s);
}
这两个有什么区别


为了提高程序的效率,我们用define来定义一个函数,这样在频繁调用的时候就不会有函数调用的开销了,这就是宏函数,但宏定义只是把S(a,b)简单地替换成a*b,这样会产生问题,最典型的两种:

1.缺括号,比如aera=S(x+y,x-y),会被替换成x+y*x-y

2.自增运算符

定义宏

#define S(a) (a)*(a)

结果S(a++),变成(a++)*(a++)这个大家都知道,在不同编译环境下会有不同结果。

也就是说,宏只是编译前简单替换代码内容,而函数真正产生代码。

宏是编译期的,函数是运行期的;

宏不是实体,而函数是一个可寻址的实体;

宏只是编译期替换,在程序里每遇到S(a,b),就用a*b代替,a和b两个实体并没有由宏实际产生,而函数S会在栈中定义两个对象a和b。

宏没有生存期、作用域之类的概念,而函数就有。

函数在运行过程中会在栈中产生函数调用过程活动记录,而宏则没有。

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值