====== Funkce (podprogram) ======
Funkce představuje ucelenou část programu, která se dá opakovaně volat z jiných částí programu.
Funkce má přiřazený vlastní identifikátor, vstupní parametry a typ návratové hodnoty.
Nejzákladnější dva typy funkcí jsou:
* **S návratovou hodnotou** Taková funkce má uvedený typ návratové hodnoty (výsledku) a musí vždy uvnitř svého těla vracet hodnotu stejného datového typu pomocí příkazu //return hodnota;//
* **Bez návratové hodnoty** Takové funkci říkáme **procedura**. **Návratovým typem** takové funkce je z pravidla **void**. Procedura nemusí volat příkaz return. Pokud chceme proceduru předčasně ukončit, příkaz return se volá bez hodnoty - //return;//
===== Deklarace funkce =====
Deklaraci funkce provádíme na globální úrovni souboru se zdrojovým kódem. To znamená na stejné úrovni, jako je definovaná funkce main. Funkce musí být vždy deklarována před tím, než dojde k jejímu volání (zdrojový kód se zpracovává shora dolů). Funkci nelze deklarovat uvnitř jiné funkce.
Deklaraci funkce lze rozdělit na 2 základí části:
* hlavička funkce
* tělo funkce (implementace)
V některých případech je možné provést dopřednou deklaraci hlavičky funkce a implementaci uvést až později ve zdrojovém kódu. Viz příklady.
==== Hlavička funkce ====
Hlavička funkce definuje:
* identifikátor - název funkce
* seznam parametrů - formální parametry
* typ návratové hodnoty
==== Tělo funkce ====
Tělo je tvořeno vlastním kódem funkce/procedury ve složených závorkách (blok). Pokud se jedná o funkci, která má definovaný jiný typ návratové hodnoty než //void//, tak musí všechny možné průchody danýmkódem končit voláním //return hodnota;//, kde datový typ hodnoty musí odpovídat typu návratové hodnoty v hlavičce.
==== Syntaxe definice funkce s návratovou hodnotou ====
typ_návratové_hodnoty identifikátor(typ param1, typ param2, ...) {
// Tělo funkce
prikaz1;
prikaz2;
...
return hodnota;
}
===== Volání funkce =====
Funkce se volá svým identifikátorem, za kterým následuje kulatá závorka se seznamem **skutečných parametrů**. Pokud funkce vrací výsledek (//není typu void//), je po jejím vykonání nahrazeno volání výsledkem.
identifikátor(param1, param2, ...);
===== Ukázky =====
==== Funkce absolutní hodnota ====
// Hlavička souboru
double absolutniHodnota(double cislo) {
if (cislo < 0)
return -cislo;
return cislo;
}
int main(int argc, char *argv[]) {
double vysl = absolutniHodnota(-42.5);
printf("%f\n", vysl);
}
==== Procedura pro pozdravení ====
// Hlavička souboru
void pozdrav() {
puts("Ahoj");
}
int main(int argc, char *argv[]) {
pozdrav();
}