można użyć atrybutu always_inline
na przykład:
void foo() __attribute__((always_inline));
Z docs
always_inline Generalnie funkcje nie są inlined chyba że podano optymalizacji. W przypadku funkcji zadeklarowanych jako wbudowany ten atrybut włącza funkcję , nawet jeśli nie określono poziomu optymalizacji.
Note1: Nie ma potrzeby korzystania inline
jeśli użyć atrybutu always_inline
Uwaga2: Jeśli ta funkcja nie może być inlined otrzymasz ostrzeżenie, jeżeli na przykład definicja nie jest dostępne podczas kompilacji, jednak na wyższym gcc optymalizacja może nadal inline go do rozmówcy, jest to swoisty przełącznik że zbyt:
-funit-at-a-time
z docs:
poziom optymalizacji -O2 i powyżej, w szczególności umożliwiają unit-at-a-time mode, który pozwala kompilator pod uwagę informacje uzyskane od późniejszych funkcji w pliku podczas kompilacji funkcję . Kompilowanie wielu plików naraz do pojedynczego pliku wyjściowego w trybie tryb jednostkowy umożliwia kompilatorowi wykorzystanie informacji uzyskanych z wszystkich plików podczas kompilowania każdego z nich.
Uwaga 3: Nie jest konieczne, aby mieć wyraźny prototypu, dzięki czemu można użyć atrybutu na umowach definicja funkcji:
__attribute__((always_inline)) void foo() {
//some code
}
zobaczyć także ten discussion, że odpowiedzi na niektóre pytania.
czy działa nawet wtedy, gdy definicja funkcji nie jest dostępna podczas kompilacji określonej jednostki? w jaki sposób kompilator radzi sobie z taką sytuacją. – sgupta
@ user1075375 jak definicja funkcji może być niedostępna? musi tam być, w przeciwnym razie nie będzie kompilacji/link – iabdalkader
"Jeśli implementacja funkcji nie znajduje się w pliku nagłówkowym iw oddzielnej jednostce kompilacji, nie może być wstawiona, chyba że masz kompilator, który może wykonać LTCG" z http: // stackoverflow.com/questions/5187735/how-to-inline-string-h-function-on-linux?rq = 1 – sgupta