宏与函数的比较

1、宏的概念
宏定义是指将一个标识符定义一个字符串,在源程序中该标识符被字符串替换的实现方式。宏书写的格式为:#define 宏名(参数表) 宏。

2、宏与函数的区别
宏与函数的比较

3、宏的优缺点
(1)优点:
1)提高程序的可读性,而且方便修改;
2)宏只是进行简单的字符串替换,没有参数的入栈和出栈,提高了程序的运行效率。
(2)缺点:
1)宏不进行类型检测,存在安全隐患;
2)因为边界问题会使程序产生二义性;
3)宏不支持递归;
4)宏不能访问类对象的私有成员;
5)宏在执行的时候不可以进行调试;

4、宏与内联函数的区别
(1)内联函数在编译时展开,宏在预编译时展开;
(2)编译内联函数可以嵌入到目标代码,宏只是进行简单的字符串替换;
(3)内联会做类型和语法检查,而宏不具有这样的功能;
(4)inline函数是函数,而宏不是函数;
(5)宏定义处理宏参数时存在边界问题(一般参数都要用括号括起来),而内联函数定义不会出现这样的问题。

5、内联函数的优缺点
(1)优点:
1)inline定义的内联函数,函数代码被放在符号表中,在使用时进行替换(向宏一样展开),效率高。
2)类的内联函数也是函数,编译器在调用一个内联函数时,首先会检查参数问题,保证类型和语义正确,向对待真正函数一样消除隐患和局限性。
(2)缺点
1)如果函数的代码较长,使用内联函数将消耗过多内存,这种情况编译器会自动把它作为非内联函数处理。
2)如果函数体内有循环,那么执行函数代码时比调用开销大。

6、宏与函数的选择
以下情况选择宏,其他情况选择函数:
(1)用宏代表简短的表达式时;
(2)在考虑效率的时候,可以考虑用宏或者内联函数;
(3)在头文件保护(防止重复编译)的时候,如:条件编译中的#ifdef、#if defined以及assert的实现。