当前位置:嗨网首页>书籍在线阅读

03-内联函数

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

内联函数

编译器会把“内联(inline)”函数的全部代码拷贝到调用函数的地方。对于普通函数而言,函数是保存在调用函数的外面,每次调用时就跳到保存的位置;而内联函数是直接运行函数内容。通过这种方式,可以节省函数调用的开销,可以在调用方处进行优化,因为编译器可以对调用方和被调用方统一优化。如果调用方传递的函数参数是个常数时,这一点就特别有用。但是,一般来说,把一个函数拷贝到每个代码块中对于代码大小可能会有非常大的影响。因此,只有当函数很小、很简单且使用的地方不是特别多时,才考虑实现成内联函数。

GCC已经支持inline关键字很多年了,inline关键字可以告诉编译器把给定函数关联起来。C99正式定义了该关键字:

582.png 但是,从技术角度看,该关键字只是提示——告诉编译器要对给定函数进行内联。GCC进一步提供了扩展,告诉编译器对指定的函数“总是(always)”执行内联操作:

583.png 内联函数最明显的替代是预处理器宏。GCC中的内联函数性能和宏一样,同时可以做类型检查。举个例子,下面这个宏定义:

584.png 可以通过相应的内联函数来实现:

585.png 编程人员往往会过多使用内联函数。在现代计算机体系架构上,尤其是x86,函数调用的成本非常非常低。只有最有价值的函数才值得考虑使用内联函数!