10.宏定义(define)和内联函数(inline)的区别-灵析社区
1.二者的区别
- 内联函数是在编译时展开,而宏在编译预处理时展开;在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换。
- 内联函数是真正的函数,和普通函数调用的方法一样,在调用点处直接展开,避免了函数的参数压栈操作,减少了调用的开销,在编译后的代码段中可以看到内联函数的定义。宏定义编写较为复杂,常需要增加一些括号来避免歧义。宏定义只进行文本替换,不会对参数的类型、语句能否正常编译等进行检查,因此在实际使用宏时非常容易出错。而内联函数是真正的函数,会对参数的类型、函数体内的语句编写是否正确等进行检查。
- 内联函数可以进行调试,宏定义的“函数”无法调试。
- 由于类的成员函数全部为内联函数,通过内联函数,可以访问类的数据成员,而宏不能访问类的数据成员。
- 在 inline 函数传递参数只计算一次,而在使用宏定义的情况下,每次在程序中使用宏时都会计算表达式参数,因此宏会对表达式参数计算多次。
阅读量:1476
点赞量:0
收藏量:0