====== 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(); }