Встраиваемые функции (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; просмотров: 443;