使用inline关键字是否值得,或者编译器足够聪明,知道何时需要内联函数?
答案 0 :(得分:15)
是的,它足够聪明。但是,在过去的40年里,没有取得任何进展的是C程序的构建方式。它一次只是一个源代码文件。
因此,要在多个.c文件中内联函数,请将函数定义放在.h文件中。如果你不将它们标记为内联,链接器会抱怨多个定义。
答案 1 :(得分:9)
编译器非常智能,并且有多个指标可以确定某些内容是否值得内联。但有时候开发人员会知道应用程序将如何运行,并且知道内联编译器不会自动执行的操作。但是,除非我做了一些基准测试并发现内联可以提高我的性能,否则我绝不会手动内联。
您可以详细了解GCC uses inline。
答案 2 :(得分:3)
总是值得明确表达意图。
还值得注意的是,编译器甚至不需要内联,如果它也认为它更好。
答案 3 :(得分:0)
标准说
7.1.2函数说明符
2。带有内联说明符的函数声明(8.3.5,9.3,11.4)声明了一个内联函数。内联说明符向实现指示在调用点处函数体的内联替换优先于通常的函数调用机制。在呼叫点执行此内联替换不需要实现;但是,即使省略了这种内联替换,仍应遵守7.1.2定义的内联函数的其他规则。
所以我将inline
比作HTML中的<br />
- 最好始终使用自我关闭<br />
。但有人可能会争辩说,几乎所有的浏览器实现都会使<br>
和<br />
完全相同,而IMO却忽略了这一点。
正如其他人所指出的那样,这可能与当前的绩效价值无关。但我认为它仍然很好地作为一种语义,意图传达关键词。