c的inline关键字的使用要求

大家都知道它会快, 但我想说一点我之前不知道的: 如果希望inline有效果, 使用的地方就得与定义的地方在同一个文件, 得知道函数体. 我觉得原因是这样的: 如果不在一个文件, 那么调用它的函数就必然会是call了, call的话, 就不会省去任何函数的开销. 我们知道, c是单文件编译的(局限我的所知), 它看不到其它文件. 反过来, 如果函数体与调用在同一个文件中, 那么就可以把这个函数拷贝过去, 然后再来编译.

因此如果是多文件都需要使用, 典型做法是在一个头文件中实现(是的, 与一般的头文件不包括实现的规则不同, 这是个例外), 然后声明为static(否则有重定义问题). 当然也是有代价的:

  1. 编译得到的文件变大了些
  2. 函数没有地址, 没法用函数指针, debugger也用不了

当然你可能发现第2点说的不对, 如果用函数指针, 编译器也没有报错, 那是因为编译器看到用了函数指针, 放弃了优化. inline只是建议, 不一定真的优化.

原文地址:https://www.cnblogs.com/Tokubara/p/14444053.html