Задать вопрос
kosmonaFFFt
@kosmonaFFFt
Senior Java Developer.

inline function в С

Доброго времени суток…

Может кто нибудь подсказать, как обстоят дела с inline функциями в C?
Делаю разделяемую библиотеку, при этом inline функции используются как внутри библиотеки, так и снаружи.
Сейчас все inline функции у меня определены в .h файлах, и помечены как extern inline, при этом они экспортируются из библиотеки. Если убрать extern из описания, то при попытке вызвать функцию изнутри библиотеки происходит ошибка линковки.
Я хочу понять, действительно ли эти функции инлайнятся компилятором, или нет…
  • Вопрос задан
  • 7320 просмотров
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
deleted-mifki
@deleted-mifki
Если с английским дружите, то на gcc.gnu.org/onlinedocs/gcc/Inline.html подробно описано. Там местами хитро, поэтому без конкретного кода сложно помочь.
Ответ написан
@santeri
попробуйте сделать diff по gcc -S от каждого варианта
Ответ написан
Комментировать
@MikhailEdoshin
Вы пишете, что функция у вас определена в заголовочном файле — вы имеете в виду, что весь код функции там или только объявление (то есть она объявлена, а не определена)? Мне кажется, только объявлена, иначе у вас, скорее всего, были бы дублирующиеся символы при линковке.

Вообще же extern inline функция (возможно) будет развернута в inline в той единице компиляции, где она определена, и из получившегося объекта будет торчать одноименный символ. Все остальные единицы компиляции будут использовать ее как обычную extern функцию. На SO есть небольшое обсуждение.

Если вы хотите развернуть ее во всех единицах компиляции, то можно, по примеру С++, описать функцию полностью в заголовочном файле как static inline плюс добавить не-static обертку для экспорта. (Или перед компиляцией слить все файлы в один — наверное, так будет даже проще.)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы