реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> extern inline, интересное применение
demiurg_spb
сообщение Mar 28 2017, 09:19
Сообщение #1


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Вот уже как лет 15 программирую на Си и думал, что уже знаю всё и вся, но на прошлой удивился следующему:

Оказывается, если реализацию функции поместить в заголовочном файле unit.h и описать её как
Код
inline void foo(void) { do something...}
, без слова static
а в файле unit.c поместить следующее
Код
extern inline void foo(void);

то компилятор гарантировано создаст экземпляр этой функции для внешнего вызова, а в других модулях,
включающих заголовочный файл unit.h, эта функция может заинлайнится, либо будет вызвана из модуля unit.c
(это зависит от уровня оптимизации и отдано на откуп компилятору).

Вот такие пироги)))


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
novikovfb
сообщение Mar 28 2017, 09:47
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 518
Регистрация: 29-09-11
Пользователь №: 67 450



и что это может дать с практической точки зрения?
ИМХО, надо или объявлять как static inline или делать обычную функцию в зависимости от направления оптимизации (размер или скорость).
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 28 2017, 12:33
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(novikovfb @ Mar 28 2017, 12:47) *
Если интересно, почитайте стандарт С99 - там написано то, о чём я вкратце изложил.
Даёт именно то о чём я сказал:
в случае разделной компиляции без LTO, если компилятор не заинлайнит эту функцию в различных единицах трансляции, то мы всё равно получим ЛИШЬ ОДИН экземпляр этой функции.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th July 2025 - 08:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01362 секунд с 7
ELECTRONIX ©2004-2016