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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…