2010-06-23 57 views
2

这里是关于C++中内联函数的一个小问题。C++中的内联函数

在C++编译的哪个阶段是在调用中实际内联的函数?

这基本上是如何工作的。

可以说,如果编译器已经决定在程序员在函数前面使用内联关键字请求一个特定函数必须内联,那么编译器何时为程序员做了这些.i意思是在什么阶段汇编。

它在预处理阶段就像在c宏一样扩展吗?

+0

相关信息:http://stackoverflow.com/questions/1759300/c-when-should-i-write-the-keyword-inline-for-a-function-method – Alerty 2010-06-23 18:59:07

+0

上述重复是基于讨论关于内联函数的概念。但我的问题不是关于这个概念,而是关于编译过程。 – Vijay 2010-06-23 19:01:38

+0

@Georg Fritzsche:我编辑了我的评论;) – Alerty 2010-06-23 19:03:45

回答

4

它会因编译器而异。其他编译器中的某些阶段在其他编译器中没有相应的阶段。所以你的问题并没有真正的答案。

但通常在创建函数的分析树之后,但在代码实际生成或许多优化完成之前完成。这是实现它的最佳选择,因为您希望优化器可以使用最大量的信息。

像做预处理器宏扩展一样做,一般来说还为时过早。然后,编译器没有足够的信息来进行适当的类型检查,并且更容易导致导致副作用发生的次数更多等错误。

而且GMan在评论中提供了一个很好的维基百科链接,这个链接比我在这里的function inlining process更详细。我的回答基本上是真实的,但是有很多变化,甚至比我想象的还要多。