【发布时间】:2016-11-24 05:20:48
【问题描述】:
我看到 GCC 编译器在使用优化级别 3 时会内联静态函数,但在一种情况下不会内联非静态函数。而在其他情况下,它内联函数,无论是静态的还是非静态的。 我想知道静态或非静态函数将选择哪些参数进行内联。
【问题讨论】:
-
我很确定您在 GCC 的源代码之外找不到完整的列表。当然,这可能因版本而异,因编译器而异。但是,该标准包含一些限制。
-
如果静态函数的地址从不返回,则可以内联它,因为编译器知道如何使用它。非静态函数不一定是内联的,因为其他源文件中的代码可能会调用它。或者,至少,必须定义非内联函数,以便可以从其他翻译单元调用它,即使本地使用是内联的。