## Programovací jazyk

Tato kapitola zavádí důležitý nový koncept, totiž «podprogram» a
s ním související nový typ výrazu – volání (použití) podprogramu.

### Definice

Syntaxi «definice podprogramu» již zběžně známe:

    typ₀ jméno₀( typ₁ jméno₁, … ,typₙ jménoₙ )      /* C */
    {
        příkaz₁
        příkaz₂
        …
        příkazₘ
    }

Jednotlivé prvky zápisu mají tento význam:

 • ‹typ₀› je tzv. «návratový typ» – může být prozatím pouze jeden
   z již známých typů (‹int›, ‹unsigned›, …),
 • ‹jméno₀› je název zaváděného podprogramu,
 • ‹typ₁› … ‹typₙ› jsou typy jednotlivých «parametrů»,
 • ‹jméno₁› … ‹jménoₙ› jsou «jména» parametrů,
 • ‹příkaz₁› … ‹příkazₘ› tvoří «tělo» podprogramu.

### Výrazy

Hlavní nový typ výrazů je v této kapitole «použití podprogramu» nebo
také «volání podprogramu» (možná znáte také jako „volání funkce“).
Tento typ výrazu má následovný tvar:

    funcall ≡ jméno( expr₁, expr₂, …, exprₙ )

Předpokládejme, že ‹jméno› odpovídá definici z předchozí sekce.
Výraz je pak typově správný v případě, že:

 • typ výrazu ‹expr₁› je možné implicitně převést na ‹typ₁›,
 • typ ‹expr₂› na typ ‹typ₂›, atd., až ‹exprₙ› na ‹typₙ›.

Typ výrazu ‹funcall› jako celku je pak ‹typ₀› z definice výše.

Vyhodnocení tohoto výrazu probíhá následovně:

 1. Pro každý formální parametr je vytvořen objekt odpovídajícího
    typu; uvnitř těla podprogramu pak jména formálních parametrů
    pojmenovávají právě tyto objekty.
 2. Výrazy ‹expr₁› až ‹exprₙ› jsou vyhodnoceny na hodnoty (v blíže
    neurčeném pořadí!) a každá takto získaná hodnota je zapsána do
    příslušného objektu z předchozího bodu.
 3. Řízení je předáno tělu podprogramu (vzniká při tom mimo jiné
    nový rozsah platnosti jmen).
 4. Hodnota celého výrazu ‹funcall› je pak určena prvním spuštěným
    příkazem ‹return› uvnitř těla. Tento příkaz zároveň předá řízení
    zpátky volajícímu podprogramu.

### Příkazy

Nový příkaz ‹return expr;› má dva efekty:

 1. vyhodnotí výraz ‹expr› a jeho hodnotu «vrátí» volajícímu (viz
    předchozí podsekce),
 2. ukončí vykonávání podprogramu a předá řízení volajícímu.
