宏和内联函数的区别及优缺点

内联函数(#define)/宏定义(#define)

1.宏是由预处理器对宏进行替代;而内联函数是通过编译器控制来实现的

2.宏定义只是简单的文本替换,内联函数直接被嵌入到目标代码中去

3.宏定义不是真正的函数,没有参数类型检查,不安全;而内联函数是真正的函数,有类型检查,更为安全

5.宏在定义是要注意参数,一般用括号括起来,否则容易出现二义性,而内联函数不会出现二义性

两数比大小为例子来看内联函数和宏

宏的优点:

1.提高程序可读性,方便进行修改

2.使用带参数的宏定义既可以完成函数调用的功能,又可以避免函数的出栈入栈操作,减少系统开销,提高运行效率

3.宏是由预处理器处理的,通过字符串操作可以完成很多编译器无法实现的功能,比如##连接符

缺点:

1.不能访问私有成员

2.宏的定义容易产生二义性

3.宏定义没有参数检查不安全

内联函数的优点:

1.直接将代码插入调用处,减少普通函数调用时的资源消耗

2.有参数检测更安全

3.inline关键字只是对编译器的一个定义,如果函数不符合内联函数的标准,编译器就会把这个函数当成普通函数

缺点:

1.内联函数以复制为代价,活动产生开销

2.如果函数代码过长,使用内联函数会消耗过多内存

3.如果内联函数体有循环,执行函数代码时间调用开销大


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