函数宏与内联函数
程序员文章站
2024-03-23 14:16:46
...
函数宏
函数宏可以接收参数和返回值。创建函数宏的过程比较简单,定义一个包含参数的宏,参数的名字任意。
#define ABS(my_val) ((my_val) <0) ? -(my_val) : (my_val)
宏定义中使用了?:运算符返回正数。宏将在代码中被完整替代,可能替代许多重复的代码。宏相比于函数的优势在于它的速度。在调用宏函数的过程中不存在控制权转移。函数调用不能作为宏的参数,例如以下语句不能正常工作:
ABS(cos(36))
内联函数
内联函数的函数体比较小,可以被替换。编译器性能优化器使用内联。如果编译器优化功能被禁止,内联函数无法发挥其作用。
为使GCC在不考虑优化等级的情况下内联定义函数,使用always_inline属性。
void func_test() __attribute__((always_inline))
内联函数的优势:
- 因为它们本质上是函数,导致编译器进行参数检查
- 多次调用无风险
- 可以包含多行语句而不用纠缠于 \符号
- 内联函数有它们自己的变量作用域,并且能够返回值
- 调试相比于宏更简单