函数宏与内联函数

函数宏


函数宏可以接收参数和返回值。创建函数宏的过程比较简单,定义一个包含参数的宏,参数的名字任意。

#define ABS(my_val) ((my_val) <0) ? -(my_val) : (my_val)

宏定义中使用了?:运算符返回正数。宏将在代码中被完整替代,可能替代许多重复的代码。宏相比于函数的优势在于它的速度。在调用宏函数的过程中不存在控制权转移。函数调用不能作为宏的参数,例如以下语句不能正常工作:

ABS(cos(36))

内联函数


内联函数的函数体比较小,可以被替换。编译器性能优化器使用内联。如果编译器优化功能被禁止,内联函数无法发挥其作用。

为使GCC在不考虑优化等级的情况下内联定义函数,使用always_inline属性。

void func_test() __attribute__((always_inline))

内联函数的优势:

  • 因为它们本质上是函数,导致编译器进行参数检查
  • 多次调用无风险
  • 可以包含多行语句而不用纠缠于 \符号
  • 内联函数有它们自己的变量作用域,并且能够返回值
  • 调试相比于宏更简单
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章