always_inline
たとえば、次の属性を使用できます。
void foo () __attribute__((always_inline));
ドキュメントから
always_inline 通常、最適化が指定されていない限り、関数はインライン化されません。インラインで宣言された関数の場合、最適化レベルが指定されていなくても、この属性は関数をインライン化します。
注1 :属性inline
を使用する場合は使用する必要はありませんalways_inline
注 2 : 関数をインライン化できなかった場合は、警告が表示されます。たとえば、コンパイル時に定義が利用できない場合は、より高い最適化で gcc が呼び出し元にインライン化できます。そのための特定のスイッチもあります。
-funit-at-a-time
ドキュメントから:
特に、最適化レベル -O2 以上では、ユニット単位モードが有効になります。これにより、関数をコンパイルするときに、コンパイラはファイル内の後の関数から取得した情報を考慮することができます。ユニット単位モードで一度に複数のファイルを単一の出力ファイルにコンパイルすると、コンパイラは、各ファイルをコンパイルするときにすべてのファイルから取得した情報を使用できます。
注3 : 関数定義で属性を使用できるように、明示的なプロトタイプを用意する必要はありません。
__attribute__((always_inline)) void foo() {
//some code
}
このディスカッションも参照してください。いくつかの質問に答えます。