force inline function in other translation unit

后端 未结 1 1007
猫巷女王i
猫巷女王i 2020-12-16 23:07

This part of the gcc manual is pretty obscure and i can\'t understand the usage of the forceinline attribute after repeated attempts.

I\'m defining an object and cer

相关标签:
1条回答
  • 2020-12-16 23:26

    you can use the always_inline attribute, for example:

    void foo () __attribute__((always_inline));
    

    From the docs

    always_inline Generally, functions are not inlined unless optimization is specified. For functions declared inline, this attribute inlines the function even if no optimization level was specified.

    Note1: There's no need to use inline if you use the always_inline attribute

    Note2: If the function could not be inlined you will get a warning, if for example the definition is not available when compiling, however, at a higher optimization gcc can still inline it into the caller, there's a specific switch for that too:

    -funit-at-a-time
    

    From the docs:

    Optimization levels -O2 and above, in particular, enable unit-at-a-time mode, which allows the compiler to consider information gained from later functions in the file when compiling a function. Compiling multiple files at once to a single output file in unit-at-a-time mode allows the compiler to use information gained from all of the files when compiling each of them.

    Note3: It is not necessary to have an explicit prototype so you can use the attribute on the function defintion:

    __attribute__((always_inline)) void foo() {
       //some code
    }
    

    Also see this discussion, it answers some of your questions.

    0 讨论(0)
提交回复
热议问题