带参宏定义和函数的区别
来源:互联网 发布:前端从后端拿数据 编辑:程序博客网 时间:2024/06/05 04:34
#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
area=S(3,2)
尽量少使用宏定义。宏定义是把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。
宏没有生存期、作用域之类的概念,而函数就有。
函数在运行过程中会在栈中产生函数调用过程活动记录,而宏则没有。
- 带参宏定义和函数的区别
- 带参宏定义和函数的区别
- 84 C语言带参宏定义和函数的区别
- 内联函数和宏定义的区别
- 内联函数和宏定义的区别
- 内联函数和宏定义的区别
- 内联函数和宏定义的区别
- 宏定义和内联函数的区别
- 内联函数和宏定义的区别
- 内联函数和宏定义的区别
- 内联函数和宏定义的区别
- 内联函数和宏定义的区别
- 内联函数和宏定义的区别
- 内联函数和宏定义的区别
- 内联函数和宏定义的区别
- 内联函数和宏定义的区别
- 内联函数和宏定义的区别
- 内联函数和宏定义的区别
- Oracle 11g简化版通过导入SQL创建用户
- android 用SharedPreferences作为数据存储
- .NET笔记
- mysql导出和导入xml文件
- eclipse中java代码格式化设置方法 (zz)
- 带参宏定义和函数的区别
- Oracle错误ORA-01950对表空间"system"无权限解决
- delphi 中调用存储过程
- Network of Schools hoj&poj 强连通分量的应用 经典题!
- SVN代码merge
- openCV 中include/opencv2文件夹中只有一个文件问题解决
- 观察者(Observer)模式
- 电视制式P制与N制
- 计算机网络基础知识 二