39

I have found the following function definition :

static inline __attribute__((always_inline)) int fn(const char *s)
{
  return (!s || (*s == '\0'));
}

And I want to know the meaning of inline __attribute__((always_inline))?

nicael
  • 18,550
  • 13
  • 57
  • 90
developer
  • 4,744
  • 7
  • 40
  • 55

2 Answers2

76

The often referenced gcc documentation for always_inline is incomplete.

always_inline attribute makes gcc compiler:

  • Ignore -fno-inline (this is what the documentation says).
  • Ignore the inlining limits hence inlining the function regardless. It also inlines functions with alloca calls, which inline keyword never does.
  • Not produce an external definition of a function with external linkage if marked with always_inline.

The source of the above information is gcc source code, and, hence, is subject to change with no warning.

An interesting bechmark: always_inline performance.

Maxim Egorushkin
  • 131,725
  • 17
  • 180
  • 271
25

It forces the compiler to inline the function even if optimizations are disabled. Check this documentation for more information.

Manu343726
  • 13,969
  • 4
  • 40
  • 75