I want to force a little function not to be compiled as inline function even if it\'s very simple. I think this is useful for debug purpose. Is there any keyword to do this?
[[gnu::noinline]]
attribute
We can also use the C++11 attribute specifier syntax with the non-standard gnu::noinline
attribute: https://en.cppreference.com/w/cpp/language/attributes
It is just a matter of time until that gnu::
part gets dropped a future C++ standard to give a standardized [[noinline]]
:-)
main.cpp
[[gnu::noinline]]
int my_func() {
return 1;
}
int main() {
return my_func();
}
Compile and disassemble:
g++ -ggdb3 -O3 -o main.out -std=c++11 -Wall -Wextra -pedantic-errors main.cpp
gdb -batch -ex 'disassemble/r main' main.out
With [[gnu::noinline]]
:
0x0000000000001040 <+0>: f3 0f 1e fa endbr64
0x0000000000001044 <+4>: e9 f7 00 00 00 jmpq 0x1140
Without [[gnu::noinline]]
:
0x0000000000001040 <+0>: f3 0f 1e fa endbr64
0x0000000000001044 <+4>: b8 01 00 00 00 mov $0x1,%eax
0x0000000000001049 <+9>: c3 retq
Tested on Ubuntu 19.10.