28

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
  • 17,612
  • 12
  • 55
  • 87
developer
  • 4,400
  • 5
  • 37
  • 55

2 Answers2

62

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
  • 125,859
  • 15
  • 164
  • 254
21

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

Manu343726
  • 13,596
  • 3
  • 37
  • 73