Wywołanie podprogramu


Wywołanie podprogramu w encyklopedii

Z Wikipedii, wolnej encyklopedii Przejdź do nawigacji Przejdź do wyszukiwania

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.

Spis treści

Rodzaje wywołania | edytuj kod

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:

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:

  1. wywołanie dwóch podprogramów bibliotecznych write i readln, w instrukcji wywołania,
  2. wywołanie podprogramu Licz pobranego z modułu MyUnit, w wyrażeniu zawartym w instrukcji przypisania,
  3. wywołanie podprogramu bibliotecznego writeln, w instrukcji wywołania,

Wywołanie w wyrażeniu | edytuj kod

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:

  1. wywołanie standardowej funkcji scanf w instrukcji wyrażeniowej, wyrażenie składa się wyłącznie z wywołania tej funkcji,
  2. wywołanie niestandardowej funkcji licz w instrukcji wyrażeniowej, wyrażenie składa się z operacji przypisania, dodawania i wywołania tej funkcji,
  3. wywołanie standardowej funkcji printf w instrukcji wyrażeniowej, wyrażenie składa się wyłącznie z wywołania tej funkcji.

Szczegóły implementacje | edytuj kod

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 | edytuj kod

  1. Michał Iglewski, Jan Madey, Stanisław Matwin: Pascal. Język wzorcowy – Pascal 360. Wyd. wydanie trzecie – zmienione. Warszawa: Wydawnictwa Naukowo-Techniczne, 1984, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-85060-53-7. ISSN 0867-6011. (pol.)
  2. a b c Andrzej Marciniak: Borland Pascal 7.0. Poznań: Nakom, 1994, seria: Biblioteka Użytkownika Mikrokomputerów. ISBN 83-85060-53-7. ISSN 0867-6011. (pol.)
  3. Podręcznik Visual Basic na Wikibooks
  4. John Walkenbach: Excel 2003 PL. Programowanie w VBA.. HELION, 2004. ISBN 837361-504-0. (pol.)
  5. Niklaus Wirth: Modula 2. Warszawa: Wydawnictwa Naukowo-Techniczne, 1987, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-0828-8. ISSN 0867-6011. (pol.)
  6. a b Podręcznik języka C na Wikibooks
  7. a b Brian W. Kernighan, Dennis M. Ritche: Język C. Warszawa: Wydawnictwa Naukowo-Techniczne, 1988, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-1067-3. (pol.)
  8. a b c d Jan Bielecki: Turbo C z grafiką na IBM PC. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990, seria: Mikrokomputery. ISBN 83-204-1101-7. (pol.)
  9. a b c Jan Bielecki: Od C do C++, programowanie obiektowe w języku C. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990. ISBN 83-204-1332-X. (pol.)
  10. Podręcznik języka C++ na Wikibooks
  11. Ralph E. Griswold, Madge T. Griswold: Icon. Warszawa: Wydawnictwa Naukowo-Techniczne, 1987, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-0871-7. (pol.)
  12. Jan Małuszyński, Krzysztof Pisecki, A. van Wijngaarden, B.J. Mailloux, J.E.L. Peck, C.H.A. Koster, M. Sintzoff, .H. Lindsey, L.G.L.T. Meertens, R.G. Fisker, w tłumaczeniu Jana Małuszyńskiego i Krzysztofa Piseckiego: Algol 68. Wprowadzenie do języka Algol 68. Zmieniony raport o języku algorytmicznym Algol 68. Warszawa: Wydawnictwa Naukowo-Techniczne, 1980, seria: Informatyka. ISBN 83-204-0161-5. (pol.)

Bibliografia | edytuj kod

  1. Michael Marcotty, Henry Ledgord, tłumaczenie: Krystyna Jerzykiewicz: W kręgu języków programowania. Warszawa: Wydawnictwa Naukowo-Techniczne, 1980, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-1342-7. (pol.)
  2. John E. Nicholls: Struktura języków programowania. Warszawa: Wydawnictwa Naukowo-Techniczne, 1980, seria: Informatyka. ISBN 83-204-0246-8. (pol.)
Na podstawie artykułu: "Wywołanie podprogramu" pochodzącego z Wikipedii
OryginałEdytujHistoria i autorzy