gnu_inline (IBM 拡張)

gnu_inline 属性は、関数のインライン化動作を変更するようコンパイラーに指示します。この関数属性が使用されると、コンパイラーは C に対する GNU レガシー・インライン化拡張機能を模倣します。

この関数属性は、inline キーワード (__inline__inline__inline など) と組み合わせて使用する場合のみ、使用可能になります。
構文図を読む構文図をスキップする
gnu_inline 関数属性の構文 

>>-inline--__attribute__--((----gnu_inline----))---------------><

注: inline キーワードと __inline__ キーワードのいずれと一緒に使用しても、gnu_inline 関数属性の動作は同じです。
C に対する GNU レガシー・インライン化拡張機能のセマンティクスは次のとおりです。
extern gnu_inline:
extern inline __attribute__((gnu_inline)) func() {…};
この func の定義は、インライン化にのみ使用されます。これは、スタンドアロン関数としてコンパイルされません。
static gnu_inline:
static inline __attribute__((gnu_inline)) func() {…};
この関数が生成される場合、関数は内部リンケージとともに生成されます。
plain gnu_inline:
inline __attribute__((gnu_inline)) func() {…};
この定義は、可能な場合、インライン化に使用されます。これは、スタンドアロン関数としてコンパイルされ (強い定義として出力され)、外部リンケージとともに出力されます。
gnu_inline 属性を指定するには、関数宣言で二重括弧で囲み、キーワード __attribute__ を使用します。以下の例を参照してください。

inline int func() __attribute__((gnu_inline));

他の GCC 関数属性と同じように、属性名に付いている 2 つの連続する下線はオプションです。gnu_inline 属性は、同様に inline キーワードで宣言された関数と一緒に使用する必要があります。