宏与函数的比较

  • Post author:
  • Post category:其他


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的实现。



版权声明:本文为m0_38121874原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。