宏函数和函数的区别及优缺点
2017-07-31 16:14
148 查看
区别
测试用例:
宏函数:#define MAX(a,b) ((a)>(b)?(a):(b))
普通函数:MAX(a,b) {return a>b?a:b}
1.宏做的是简单的字符串的替换,而函数是参数的传递,参数是有数据类型的。
2.宏的参数替换是直接替换的,不经任何计算,而函数调用时将形参的值传给形参。
3.宏在编译之前进行(先用宏体替换宏名,再进行编译),而函数是在编译之后执行时才调用的。
4.宏的参数是不占内存空间的,因为只做字符串的替换,而函数调用时参数之间的传递,所以占用内存。
5.函数调用需要空间开销,因为在函数调用时它既要保存现场又要跳转到另一个函数调用中去执行,然后还要返回现场,但宏函数中就不存在。
优缺点
1.使用宏函数定义编译生成的目标文件比普通函数生成的目标文件大。
2.宏函数会导致代码的执行效率降低。
测试用例:
int a[]={9,3,5,2,1,0,7,6,4};
int max(n)
{
return n==0?a[0]:MAX(a
,max(n-1));
}
int main()
{
max(9);
return 0;
}
宏展开为(a
>max(n-1)?a
:max(n-1)),其中max(n-1)被调用了两遍,这样依次递归下去,时间复杂度会很高。
3.主要小心使用还是会显著的提高代码的执行效率。
测试用例:
宏函数:#define MAX(a,b) ((a)>(b)?(a):(b))
普通函数:MAX(a,b) {return a>b?a:b}
1.宏做的是简单的字符串的替换,而函数是参数的传递,参数是有数据类型的。
2.宏的参数替换是直接替换的,不经任何计算,而函数调用时将形参的值传给形参。
3.宏在编译之前进行(先用宏体替换宏名,再进行编译),而函数是在编译之后执行时才调用的。
4.宏的参数是不占内存空间的,因为只做字符串的替换,而函数调用时参数之间的传递,所以占用内存。
5.函数调用需要空间开销,因为在函数调用时它既要保存现场又要跳转到另一个函数调用中去执行,然后还要返回现场,但宏函数中就不存在。
优缺点
1.使用宏函数定义编译生成的目标文件比普通函数生成的目标文件大。
2.宏函数会导致代码的执行效率降低。
测试用例:
int a[]={9,3,5,2,1,0,7,6,4};
int max(n)
{
return n==0?a[0]:MAX(a
,max(n-1));
}
int main()
{
max(9);
return 0;
}
宏展开为(a
>max(n-1)?a
:max(n-1)),其中max(n-1)被调用了两遍,这样依次递归下去,时间复杂度会很高。
3.主要小心使用还是会显著的提高代码的执行效率。
相关文章推荐
- 百度面试题:宏的概念,与函数的区别,优缺点的比较。
- 百度面试题:宏的概念,与函数的区别,优缺点的比较
- 宏函数与自定义函数的区别与优缺点
- 激活函数的区别优缺点对比
- MySQL存储过程和函数的区别与优缺点
- 宏函数和函数的区别及其优缺点
- MySQL存储过程和函数的区别与优缺点
- JavaScript之几种创建函数的区别以及优缺点。
- 百度面试题:宏的概念,与函数的区别,优缺点的比较。
- 宏函数和函数的区别以及优缺点
- 关于数据库存储过程和函数的区别,优缺点以及各家之言
- 激活函数的区别优缺点对照(半完成,待翻译)
- inline函数和虚函数的区别
- 宏定义和函数调用的区别
- Python菜鸟晋级03----repr() 与str() 函数的区别
- 指针函数与函数指针的区别
- const在函数前与函数后的区别
- MySQL 的存储过程 procedure 与 函数 function 的区别和使用方法
- NGUI与UGUI的区别及其优缺点
- 线性表_顺序存储结构和链式存储结构的优缺点比较(区别)