Справочные данные по языку C++___________________________623

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

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

return выражение

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

double FSumfdouble XI,double X2, int A)
(

return A * (XI + X2) ;

}

Ниже приведен пример функции, не возвращающей никакого значения:

void SPrint(AnsiString S)
1
if (S != "")

ShowMessage (S) ;

)

Здесь возврат из функции происходит по достижении закрывающейся фигур-
ной скобки тела функции. Приведем вариант той же функции, использующий опе-
ратор return:

void SPrint(AnsiString S)
{

if (S == "") return;

ShowMessage(S) ;

1

Прервать выполнение функции можно также генерацией какого-то исключе-
ния (см. раздел 4.9). Наиболее часто в этих целях используется процедура Abort,
генерирующая «молчаливое» исключение EAbort, не связанное с каким-то сооб-
щением об ошибке. Если в программе не предусмотрен перехват этого исключе-
ния, то применение функции Abort выводит управление сразу наверх из всех вло-
женных друг в друга вызовов функций.

Возвращаемое функцией значение может включать в себя вызов каких-то
функций. В том числе функция может вызывать и саму себя, т.е. допускается ре-
курсия. В качестве примера приведем функцию, рекурсивно вычисляющую факто-
риал. Как известно, значение факториала равно n! = n • (п-1) • (п-2) • ... • 1, при-
чем считается, что I! = 1 и О! = 1. Факториал можно вычислить с помощью просто-
го цикла for (и это, конечно, проще). Но можно факториал вычислять и с помощью
рекуррентного соотношения n! = n • (п-1)!. Для иллюстрации рекурсии воспользу-
емся именно этим соотношением. Тогда функция factorial вычисления факториа-
ла может быть описана следующим образом:

unsigned long factorial (unsigned long n)
{

if (n <= 1)

return 1;

else

return n * factorial(n — 1);