静态内联 __attribute__((always_inline)) 用于仅 header 的库?

static inline __attribute__((always_inline)) for a header only library?

static inline __attribute__((always_inline))

如果我在 header 中的每个函数定义之前使用它,它会保证内联吗?未使用的函数不会出现在它包含的翻译单元中吗?

一般来说,不能保证函数会被内联。 inline 关键字只是对编译器的提示。

来自 Clang 参考 (always_inline):

Inlining heuristics are disabled and inlining is always attempted regardless of optimization level.

Does not guarantee that inline substitution actually occurs.

参考文献:

static inline __attribute__((always_inline)) for a header only library?

不,只是 static inlinestatic 使函数可以在 header、inline 中消除编译器警告。否 __attribute__,因为这会使库 non-portable 遇到挫折,即内联长函数会增加代码大小。

让用户使用他想要的内联 - -O3 内联更多,-Os 内联更少。

f I use this before every function definition in a header will it guarantee inlining

是的。

will unused functions not be in the translation unit it’s included in?

他们将在翻译单元中。它们在该翻译单元中定义。

未使用的 static 函数将不会包含在来自编译该翻译单元的结果 object 代码中。这与使用 __attribute__((always_inline)).

无关