Определение функции включает те же поля, что и прототип функции + тело функции – код, выполняющийся при вызове функции (заключён в {}).
double summa (double a, double b)
{
double c;
c=a+b;
return c;
}
Вызов функции: для обеспечения эффективного и безопасного вызова функций требуется обеспечить:
1) связь по управлению;
a) вызов и возврат;
b) сохранение и восстановление контекста вызывающей части;
2) функция должна производить одни и те же действия с разными наборами данных.
вызывающая часть | стек | функция |
a=5; b=8; | 1) Сохранение контекста | |
sum(a;b) | вызова. | |
1) Формирование | 2) Создание текущего | |
параметров в стеке. | 5 | контекста. |
2) Сохранение адреса | 3) Тело функции. | |
возврата и передача | 4) Формирование | |
управления (вызова). | return sum func | |
3) Восстановление | 5) Восстановление контекста | |
стека. | вызова. | |
4) Получение результата. | 6) Возврат. |