宏和函数的区别
2015-11-02 23:41
211 查看
#define宏和函数的区别如下:
代码长度:#define宏每次使用时,宏代码都被插入到程序中,除了非常小的程序外,宏代码将大幅度增长;
函数代码只出现于一个地方,每次使用这个函数时,都调用那个地方的同一份代码
执行速度:#define宏更快;函数存在函数调用/返回的额外开销
操作符优先级:宏参数的求值是在所有周围表达式的上下文环境里,除非他们加上括号,否则邻近操作符的优先级可能会产生不可预料的结果;函数参数只在函数调用时求值一次,它的结果值传递给函数,表达式的求值更容易预测
参数求值:参数每次使用宏定义时,它们都将重新求值,由于多次求值具有副作用的参数可能会产生不可预料的结果;
参数在函数调用前只求值一次,在函数中多次使用参数并不会导致多种求值过程,参数的副作用并不会造成任何问题
参数类型:宏与类型无关。只要对参数的操作是合法的,它可以使用任何参数类型;函数的参数是与类型有关的。如果参数的类型不同,就需要使用不同的函数,即使它们执行的任务是相同的
代码长度:#define宏每次使用时,宏代码都被插入到程序中,除了非常小的程序外,宏代码将大幅度增长;
函数代码只出现于一个地方,每次使用这个函数时,都调用那个地方的同一份代码
执行速度:#define宏更快;函数存在函数调用/返回的额外开销
操作符优先级:宏参数的求值是在所有周围表达式的上下文环境里,除非他们加上括号,否则邻近操作符的优先级可能会产生不可预料的结果;函数参数只在函数调用时求值一次,它的结果值传递给函数,表达式的求值更容易预测
参数求值:参数每次使用宏定义时,它们都将重新求值,由于多次求值具有副作用的参数可能会产生不可预料的结果;
参数在函数调用前只求值一次,在函数中多次使用参数并不会导致多种求值过程,参数的副作用并不会造成任何问题
参数类型:宏与类型无关。只要对参数的操作是合法的,它可以使用任何参数类型;函数的参数是与类型有关的。如果参数的类型不同,就需要使用不同的函数,即使它们执行的任务是相同的
相关文章推荐
- 【LeetCode从零单刷】Search in Rotated Sorted Array I & II
- 用C++/CLI搭建C++和C#之间的桥梁(一)—— 简介
- c++11特性之std::thread--初识二
- c++11特性之std::thread--初识二
- C语言预处理 # 和## 运算符
- 对C++中文件输出流成员函数的认识
- 任意进制整数之间的相互转换(C++实现)
- C++练习
- C++重载运算符函数需知
- c++ primer第五版(中文)习题答案 第二章第五节-处理类型
- 导弹拦截<DP><贪心><C++>
- c++11特性之std::thread--初识
- c++11特性之std::thread--初识
- c++栈和队列
- 编码问题:unicode与utf-8,wchar_t与char
- 【LeetCode从零单刷】Remove Duplicates from Sorted Array I & II
- xerces C/C++ 读取XML文件
- malloc、calloc、realloc的区别
- c++中的引用和指针
- PHP怎么与C语言通信