宏函数和普通函数的区别
作者:网络转载 发布时间:[ 2012/9/21 10:20:47 ] 推荐标签:
#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。
宏函数没有生存期、作用域之类的概念,而函数有。
函数在运行过程中会在栈中产生函数调用过程活动记录,而宏函数则没有。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11