强制在其他翻译单元中使用内联函数

这部分gcc手册非常模糊,我无法理解重复尝试后forceinline属性的用法。

我正在定义一个对象和某些函数来操纵该对象。 这些函数中很少有可以使用primefaces指令,我希望编译器内联这些函数。 但是我不想在头文件中编写这些函数,并在linux内核中使用“static inline”声明它们。

有没有办法强制gcc从另一个翻译单元内联函数?

您可以使用always_inline属性,例如:

 void foo () __attribute__((always_inline)); 

来自文档

always_inline通常,除非指定了优化,否则不会内联函数。 对于内联声明的函数,即使未指定优化级别,此属性也会内联函数。

注意1 :如果使用always_inline属性,则无需使用inline

注意2 :如果函数无法内联,您将收到警告,例如,如果编译时定义不可用,但是,在更高的优化时,gcc仍然可以将其内联到调用者中,还有一个特定的开关:

 -funit-at-a-time 

来自文档 :

优化级别-O2及以上,特别是,启用一次一个单元模式, 允许编译器在编译函数时考虑从文件中的后续函数获得的信息 。 一次一个地编译多个文件到单个输出文件允许编译器在编译每个文件时使用从所有文件中获取的信息

注3 :没有必要使用显式原型,因此您可以在函数定义中使用该属性:

 __attribute__((always_inline)) void foo() { //some code } 

另请参阅此讨论 ,它会回答您的一些问题。