Najlepsze pytania
Chronologia
Czat
Perspektywa
Wywołanie podprogramu
Z Wikipedii, wolnej encyklopedii
Remove ads
Wywołanie podprogramu, to przekazanie sterowania w programie komputerowym do wybranego podprogramu. Taka operacja definiowana jest w kodzie źródłowym w odpowiedni sposób określony w składni konkretnego języka programowania. Wywołanie podprogramu, w skompilowanym, gotowym programie komputerowym, wiąże się z niejawnym wykonaniem szeregu akcji dodatkowych, takich między innymi jak skojarzenie argumentów zawartych w wywołaniu z odpowiednimi parametrami wyspecyfikowanymi w deklaracji podprogramu, a także umieszczenie na stosie niezbędnego adresu umożliwiającego powrót z podprogramu do miejsca wywołania oraz wiele innych kwestii i szczegółów technicznych.
Remove ads
Rodzaje wywołania
W tych językach, w których wyróżnia się instrukcję i wyrażanie jako odrębne pojęcia składniowe (np. Pascal[1][2], Visual Basic[3], VBA[4], Modula 2[5] i inne), rozróżnić można wywołanie podprogramu:
- w instrukcji wywołania,
- w wyrażeniu, do którego podprogram przekazuje wartość.
Przykład w języku Turbo Pascal[2]:
uses Crt, MyUnit;
var x : integer;
begin
write('x='); readln(x); { 1 }
x:=1+Licz(x); { 2 }
writeln('New x is ',x) { 3 }
end.
W powyższym przykładzie mamy w kolejnych liniach kodu źródłowego następujące wywołania podprogramów:
- wywołanie dwóch podprogramów bibliotecznych
write
ireadln
, w instrukcji wywołania, - wywołanie podprogramu
Licz
pobranego z modułuMyUnit
, w wyrażeniu zawartym w instrukcji przypisania, - wywołanie podprogramu bibliotecznego
writeln
, w instrukcji wywołania,
Remove ads
Wywołanie w wyrażeniu
Podsumowanie
Perspektywa
Natomiast w innych językach, takich jak np. C[6][7][8][9], C++[10][9] i pochodne, Icon[11], Algol 68[12] i inne, wywołanie podprogramu dokonywane jest zawsze w wyrażeniu, nawet jeżeli jest to wywołanie proceduralne w odrębnej linii kodu bez przypisania zwracanej przez podprogram wartości (tj. z jej ignorowaniem). Takie wywołanie bowiem stanowi instrukcję wyrażeniową, na którą składa się wyrażenie zakończone odpowiednim ogranicznikiem instrukcji, tzn. terminatorem lub separatorem, w zależności od przyjętych przez autorów języka rozwiązań.
Przykład w języku C[6][7][8][9]:
#include "stdio.h"
int licz(int x);
int main(void)
{
int x;
scanf("x=%d\n\r", x); /* 1 */
x = 1 + licz(x); /* 2 */
printf("New x is %d", x); /* 3 */
}
W powyższym przykładzie mamy w kolejnych liniach kodu źródłowego następujące wywołania w wyrażeniach:
- wywołanie standardowej funkcji
scanf
w instrukcji wyrażeniowej, wyrażenie składa się wyłącznie z wywołania tej funkcji, - wywołanie niestandardowej funkcji
licz
w instrukcji wyrażeniowej, wyrażenie składa się z operacji przypisania, dodawania i wywołania tej funkcji, - wywołanie standardowej funkcji
printf
w instrukcji wyrażeniowej, wyrażenie składa się wyłącznie z wywołania tej funkcji.
Remove ads
Szczegóły implementacje
Podsumowanie
Perspektywa
Różny sposób implementacji wywołania podprogramu w różnych systemach programowania skutkować może ich niezgodnością i brakiem możliwości programowania hybrydowego. Przykładem takiej niezgodności są różne konwencje zastosowanie dla języka C i Pascal, które dla uzyskania odpowiedniej zgodności wymuszają stosowanie dodatkowych modyfikatorów, powodujących zmianę sposobu kompilacji podprogramu, umożliwiającą zastosowanie podprogramu w innym systemie programowania. Za przykład mogą posłużyć kompilatory firmy Borland serii Turbo, w tym Turbo C[8] i Turbo Pascal[2]. Aby skompilować funkcję C, dostosowaną do konwencji języka Pascal, należy zastosować niestandardowy dla tego języka modyfikator pascal
w deklaracji funkcji.
Przypisy
Bibliografia
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads