Функции специального назначения

C++ поддерживает функции специального назначения. Они включают встроенные функции, void-функции и рекурсивные функции. Встроенные (inline) функции помогают ускорять программу. Void-функции в C++ аналогичны процедурам на других языках программирования. Рекурсивные функции – специальные виды функций, которые вызывают себя сами, пока наконец не получат окончательного результата.

Встроенные функции (inline-функции)

Использование inline-функций может ускорить выполнение программы.

Обработка вызова обычной функции на этапе выполнения программы происходит следующим образом:

– приостанавливается выполнение вызывающей функции и запоминается адрес возврата;

– в стеке выделяется место под параметры вызываемой функции, значения аргументов передаются параметрам, и функция выполняет свою работу;

– если функция является типизированной, то создается временная переменная для хранения возвращаемого значения;

– когда значение возвращено, эта временная переменная уничтожается.

Все это требует времени на выполнение. Ускорение выполнения программы за счет использования inline-функций происходит потому, что на этапе компиляции вызов функции заменяется копией ее тела, а параметры заменяются аргументами, поэтому на этапе выполнения функция на самом деле не вызывается. Однако в тех случаях, когда размер inline-функции достаточно большой и ее вызовы встречаются слишком часто, общий объем программы может сильно увеличиться. Поэтому в качестве inline-функций используются очень маленькие функции, а большие реализуются обычным способом.

Для создания inline-функций используется модификатор inline, который предшествует объявлению функции. Например, создадим встроенную функцию для вычисления квадрата числа:

inline int Sqr(int X)

{ return X * X; }

//---------------------------------------

void main()

{

int X = 5;

int Y = Sqr(X); // подстановка Y = X * X;

printf("\n\n Квадрат %lf равен %lf", X, Y);

}

Ключевое слово inline не является командой, оно представляет лишь запрос к компилятору сгенерировать подставляемый код, который не обязательно будет удовлетворен. Например, inline-функции не могут быть рекурсивными или содержать статические локальные переменные. Некоторые компиляторы не подставляют функции, содержащие циклы, операторы switch и goto. Если какое-либо из ограничений нарушено, то компилятор генерирует обычную функцию.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: