Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Что такое inline функция ?


Автор: Wowa 14.12.2004, 14:30
Что такое inline функция ? И какая мне разница inline она или нет?

Автор: srd 14.12.2004, 14:41
inline-функция - это функция с модификатором ilnline, код которой компилятор может встроить в место вызова функции. Например
Код

inline int func(void)
{
   return 5;
}

int main(void)
{
   int n = func();
   // ...
}

Компилятор может встроить код функции, примерно так:
Код

int main(void)
{
   int n = 5; // нет функции, есть её код
   // ...
}

Т.к. вызов функции требует некоторых накладных расходов, то inline-функции могут увеличить эффективность, но приводят к увеличению кода.
inline - это только рекомендация, компилятор сам решает, может он встроить функцию или нет. Сложные функции с операторами ветвления, циклов и т.п. вполне могут быть не встроены.
Например, если определение inline-функции расположено в заголовочном файле, и компилятор не сможет её встроить, то проект скомпилируется, но в каждом модуле, включающем этот заголовок, будет своя копия функции smile

Автор: cardinal 14.12.2004, 19:07
Цитата(srd @ 14.12.2004, 13:41)
Т.к. вызов функции требует некоторых накладных расходов, то inline-функции могут увеличить эффективность, но приводят к увеличению кода.

То есть можнп сказать: Быбирай - быстродействие или компактность. Если программа для pc то обычно выбирают первое, а вот если у тебя какая нибудь embedded system с ROM'ом в 32 Кб, то тут иногда не до быстродействия smile

Автор: mr.DUDA 14.12.2004, 23:29
З.Ы. от себя хотел бы добавить, что "накладные расходы на вызов ф-ции" - не пустой звук ! Например, ф-ция которая вычисляет Max из двух-трёх значений, в inline-варианте будет работать на 10-25% быстрее, т.к. не-inline функция потребует создания кадра стека и сопутствующих действий (пролог-эпилог), а inline - "прозрачно", т.е. прямо в коде текущей функции выполнит все свои действия.

Автор: [ss]3L33T@ 15.12.2004, 05:43
+к теме:
__inline
__forceinline

см. MSDN

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)