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

Использование функций снижает быстродействие программы. Это объясняется затратами времени на вызов функций (работа со стеком программы). Если в программе используется большое количество вызовов небольших функций, то быстродействие программы может существенно снизиться.

Избежать этого можно применением, так называемых, встраиваемых функций. Встраиваемые функции задаются ключевым словом inline:

 

inline int ReadInt(char *S) //Ввод целых значений по текстовому запросуS

{

cout << S;

Int I;

cin >> I;

Return I;

}

{

……..

int Vozrast = ReadInt (“Сколько Вам лет? ”);

……..

int Kurs = ReadInt (“На каком курсе Вы учитесь? ”);

……..

int Ocenka = ReadInt (“Сколько у Вас отличных оценок в последней сессии? ”);

……..

}

При определении inline-функции компилятор заменяет (если это можно сделать) каждый вызов этой функции кодом функции. При такой подстановке код программы увеличивается, но зато экономится время на вызов встроенной функции.

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

Некоторые компиляторы накладывают определенные ограничения на содержание встраиваемых функций. К таким ограничениям обычно относятся использование внутри встраиваемых функций:

· рекурсии;

· циклов, переключателей, инструкций goto;

· статических (static) переменных.

В любом случае компилятор сам определит можно ли встраивать функцию или необходимо вызвать ее обычным способом.

Прототипы функций

Прототипом функции называется заголовок функции (со списком параметров), заканчивающийся символом ;. Например:

 

double F (int P1, double P2 ); // Это прототип функции F

 

double F (int P1, double P2 )// А это сама функция F

{

return P1 * P2;

}

 

В прототипе функции допускается не указывать имена параметров (типы параметров должны быть указаны обязательно). Например, прототип той же функции можно записать так:

 

double F (int, double); // И это прототип функции F

 

Назначение прототипов – это опережающее описание функции, определяющее правила вызова функции.

Обычно прототипы функций используются в заголовочных файлах.

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

 

Void A ()

{

……

B ();

……

}

Void B ()

{

……

A ();

……

}

 

Это пример, так называемого, “перекрестного” вызова функций (функция А вызывает функцию В, а функция В вызывает функцию А). В этом случае конфликт может быть разрешен с помощью использования прототипа функции B:

 

Void B ();

Void A ()

{

……

B ();

……

}

Void B ()

{

……

A ();

……

}

 

Теперь функция А “знает”, что представляет собой функция В и как ее вызвать.

 








Дата добавления: 2019-02-07; просмотров: 378;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.01 сек.