宏与函数的对比
来源:互联网 发布:战斗吧剑灵刻印数据 编辑:程序博客网 时间:2024/06/01 23:20
宏与函数各自优缺点
宏优于函数
- 类型无关:在宏定义时,不需要先为内容确定类型。函数则必须为参数、返回值声明类型。
- 规模、速度更胜一筹:因为宏的内容不需要像函数般占据内存,在工程很庞大时,这点会很明显。而且在工程很小的情况下,调用函数和从函数返回的代码可能比实际执行这个小型计算工作所需要的时间更短。
- 传递类型作为参数:
(范例引用于网络图片)
函数优于宏
- 代码较短:每次使用宏,就会有一份宏定义的代码插入程序,除非宏比较短,否则可能大幅度增加代码长度。
- 宏在使用后无法调试,而函数可以调试易于找出错误。
- 类型无关:因为类型无关,编译器只对其进行字符替换的时候,没有类型安全检查,并且在字符替换是可能产生意料不到的错误(边际效应)。
- 宏在使用时可能带来运算符优先级带来的错误。
- 当宏参数在宏定义中出现超过一次时,如果参数本身会有类似自增自减之类的将引起自身改变的情况,可能会带来不可预测的结果。
- 宏通常只用来写简单运算,而函数可以进行复杂的运算。
附:
宏进行字符替换时是真的只进行替换,没有进行自行计算。。
因此在使用时不要吝于使用括号。。
例:
#define SQUARE(x) x*x
...
SQUARE(3+1);
//替换为 3+1*3+1 并非 看起来的(3+1)*(3+1)
//因此想要得到后者所示结果应写成 #define SQUARE(x) (x)*(x)
1 0
- 宏与函数的对比
- sql server 与 oracle函数的对比
- C++ 与 Java的成员函数对比
- 线程安全与可重入函数的对比
- Promise与函数嵌套的对比
- rand()函数与srand()函数的对比与使用
- C++函数与java函数菜鸟级的对比理解
- C++函数与java函数菜鸟级的对比理解
- 对比C++中sizeof与strlen函数的区别
- Python与Erlang函数性的对比(一)
- 宽字符串与普通字符串的函数对比
- [转]基于C++的OpenCV常用函数(与C对比)
- 集算器与R语言的循环函数对比
- 函数fork()与vfork()的对比
- c++==与c的函数对比(4)
- strstr函数的对比
- PostMessage 与 SendMessage 函数对比
- mysql 与Oracle 函数对比
- IntelliJ IDEA——SVN的配置及使用
- 项目开始 第一天 (MVC模式 数据库连接)
- hdu 1166 敌兵布阵(基础树状数组)(基础线段树--单点更新)
- ZOJ1217解决方法及思路
- POJ 3258 River Hopscotch(二分)
- 宏与函数的对比
- OPENCV创建标定板的几种方法
- 计蒜客
- 自定义连接池
- pandas string转dataframe
- Python的结构型设计模式之桥接模式
- 备份的重要性
- 用Python&OpenGL采用数值微分法和中点画圆法写图形学作业——会动的时钟
- Dynamics CRM 流程错误 simultaneous connections limit reached for organization