ustify"> begin / / початок тіла підпрограми
WriteLn («Bye»);
end;// Кінець тіла підпрограми
begin
WriteLn («Hello»);
subprog;// 1-й виклик
subprog;// 2-й виклик
subprog;// 3-й виклик
end.
Результатом виконання такої програми стане виведення рядка «Hello» і трьох рядків «Bye».
Для збереження і відновлення контексту виконання викликає процедури, з метою виключення побічних ефектів, пов'язаних з можливим небажаним зміною використовуваних машинних регістрів, компілятор формує для кожної процедури спеціальні послідовності команд, звані прологом і епілогом процедури.
Деякі мови програмування (наприклад, Паскаль, Ада, Модула - 2) допускають опис вкладених підпрограм, тобто приміщення підпрограм всередину інших підпрограм. Такі вкладені підпрограми можуть використовуватися тільки в тій подпрограмме, в якій вони описані. В інших випадках (наприклад, в мові Сі) вкладення підпрограм не допускається. Ніяких принципових переваг вкладення підпрограм не дає, але може бути зручно для більш логічною структуризації програми (якщо якась підпрограма використовується тільки в деякій іншій підпрограмі, логічно помістити першу в другу).
. Параметри підпрограм. Призначення параметрів
Підпрограми часто використовуються для багаторазового виконання стереотипних дій над різними даними. Підпрограма зазвичай має доступ до об'єктів даних, описаним в основній програмі (принаймні, до деяких з них), тому для того, щоб передати в підпрограму оброблювані дані, їх досить привласнити, наприклад, глобальним змінним. Але такий шлях не особливо зручний і чреватий помилками.
Для забезпечення контрольованої передачі параметрів в підпрограму та повернення результатів з неї використовується механізм параметрів. Параметри описуються при описі підпрограми (у її заголовку) і можуть використовуватися усередині процедури аналогічно змінним, описаним в ній. При виклику процедури значення кожного з параметрів вказуються в команді виклику (зазвичай після імені підпрограми, що викликається).
program SubProgExample2;
/ / Опис підпрограми subprog
procedure subprog (Line: String);// Тема, що включає ім'я підпрограми
begin / / початок тіла підпрограми
WriteLn (Line);
end;// Кінець тіла підпрограми
begin
WriteLn («Hello»);
subprog («Good bye,»);// 1-й виклик
subprog («my love,»);// 2-й виклик
subprog («good bye!");// 3-й виклик
end.
У наведеному прикладі параметр Line підпрограми subprog в кожному виклику отримує різне значення, завдяки чому формується не однакові рядки, а різні.
Формальні і фактичні параметри
Щоб відрізняти параметри підпрограми, описані в її заголовку і тілі, від параметрів, що вказуються при виклику підпрограми, використовуються формальні і фактичні параметри. Так, в останньому прикла...