Funkce v programování C s příklady: rekurzivní a inline
Co je funkce v C?
Funkce v programování v C je opakovaně použitelný blok kódu, který usnadňuje pochopení, testování a lze jej snadno upravovat bez změny volajícího programu. Funkce rozdělují kód a modularizují program pro lepší a efektivnější výsledky. Stručně řečeno, větší program je rozdělen do různých podprogramů, které se nazývají funkce
Když rozdělíte velký program na různé funkce, bude snadné spravovat každou funkci samostatně. Kdykoli se v programu vyskytne chyba, můžete snadno prozkoumat chybné funkce a opravit pouze tyto chyby. Můžete snadno volat a používat funkce, kdykoli jsou potřeba, což automaticky vede k úspoře času a prostoru.
Knihovna vs. Uživatelsky definované funkce
Každý 'C' program má alespoň jednu funkci, která je hlavní funkcí, ale program může mít libovolný počet funkcí. Funkce main () v C je výchozím bodem programu.
V programování „C“ jsou funkce rozděleny do dvou typů:
- Funkce knihovny
- Uživatelsky definované funkce
Rozdíl mezi knihovnou a uživatelsky definovanými funkcemi v C je v tom, že pro funkci knihovny nepotřebujeme psát kód. Je již přítomen v hlavičkovém souboru, který vždy vkládáme na začátek programu. Stačí zadat název funkce a použít ji spolu se správnou syntaxí. Printf, scanf jsou příklady funkcí knihovny.
Zatímco uživatelsky definovaná funkce je typ funkce, ve které musíme napsat tělo funkce a zavolat funkci, kdykoli požadujeme, aby funkce provedla nějakou operaci v našem programu.
Uživatelem definovanou funkci v C vždy zapisuje uživatel, ale později může být součástí knihovny 'C'. Je to hlavní výhoda programování 'C'.
Programovací funkce C jsou rozděleny do tří činností, jako je
- Deklarace funkce
- Definice funkce
- Volání funkce
Deklarace funkce
Deklarace funkce znamená napsání názvu programu. Je to povinná součást pro použití funkcí v kódu. V deklaraci funkce pouze specifikujeme název funkce, kterou budeme v našem programu používat jako deklaraci proměnné. Nemůžeme použít funkci, pokud není deklarována v programu. Deklarace funkce se také nazývá „Function prototyp. "
Deklarace funkcí (nazývané prototyp) se obvykle provádějí nad funkcí main () a mají obecný tvar:
return_data_type function_name (data_type arguments);
- Jedno return_data_type: je datový typ funkce value vrácený zpět do volajícího příkazu.
- Jedno název_funkce: následuje závorka
- Argumenty jména s jejich deklaracemi datových typů jsou volitelně umístěny v závorkách.
Uvažujeme následující program, který ukazuje, jak deklarovat funkci krychle pro výpočet hodnoty krychle celočíselné proměnné
#include <stdio.h>
/*Function declaration*/
int add(int a,b);
/*End of Function declaration*/
int main() {
Mějte na paměti, že funkce nemusí nutně vracet hodnotu. V tomto případě se použije klíčové slovo void.
Například deklarace funkce output_message označuje, že funkce nevrací hodnotu: void output_message();
Definice funkce
Definice funkce znamená pouze zapsání těla funkce. Tělo funkce se skládá z příkazů, které budou vykonávat konkrétní úkol. Tělo funkce se skládá z jednoho nebo bloku příkazů. Je také povinnou součástí funkce.
int add(int a,int b) //function body
{
int c;
c=a+b;
return c;
}
Volání funkce
Volání funkce znamená volání funkce, kdykoli je to v programu vyžadováno. Kdykoli zavoláme funkci, provede operaci, pro kterou byla navržena. Volání funkce je volitelná část programu.
result = add(4,5);
Zde je úplný kód:
#include <stdio.h>
int add(int a, int b); //function declaration
int main()
{
int a=10,b=20;
int c=add(10,20); //function call
printf("Addition:%d\n",c);
getch();
}
int add(int a,int b) //function body
{
int c;
c=a+b;
return c;
}
Výstup:
Addition:30
Argumenty funkce
Argumenty funkce se používají k získání potřebných hodnot voláním funkce. Jsou přizpůsobeny podle polohy; první argument je předán prvnímu parametru, druhý druhému parametru a tak dále.
Ve výchozím nastavení argumenty jsou předávány hodnotou ve kterém je kopie dat dána volané funkci. Skutečně předaná proměnná se nezmění.
Uvažujeme následující program, který demonstruje parametry předávané hodnotou:
int add (int x, int y);
int main() {
int a, b, result;
a = 5;
b = 10;
result = add(a, b);
printf("%d + %d\ = %d\n", a, b, result);
return 0;}
int add (int x, int y) {
x += y;
return(x);}
Výstup programu je:
5 + 10 = 15
Mějte na paměti, že hodnoty aab předané do funkce add nebyly změněny, protože do parametru x byla předána pouze jeho hodnota.
Variabilní rozsah
Rozsah proměnných znamená viditelnost proměnných v kódu programu.
V C jsou proměnné, které jsou deklarovány uvnitř funkce, lokální pro daný blok kódu a nelze na ně odkazovat mimo funkci. Proměnné, které jsou deklarovány mimo všechny funkce, jsou však globální a přístupné z celého programu. Konstanty deklarované s a #define v horní části programu jsou přístupné z celého programu. Uvažujeme následující program, který vypíše hodnotu globální proměnné z hlavní i uživatelem definované funkce:
#include <stdio.h>
int global = 1348;
void test();
int main() {
printf("from the main function : global =%d \n", global);
test () ;
return 0;}
void test (){
printf("from user defined function : global =%d \n", global);}
Výsledek:
from the main function : global =1348 from user defined function : global =1348
Probíráme detaily programu:
- Deklarujeme celočíselnou globální proměnnou s 1348 jako počáteční hodnotou.
- Deklarujeme a definujeme funkci test(), která nebere argumenty ani nevrací hodnotu. Tato funkce pouze vypíše hodnotu globální proměnné, aby demonstrovala, že ke globálním proměnným lze přistupovat kdekoli v programu.
- Globální proměnnou vytiskneme v rámci hlavní funkce.
- Zavoláme testovací funkci, abychom vytiskli hodnotu globální proměnné.
V C, když jsou argumenty předány parametrům funkce, parametry fungují jako lokální proměnné, které budou zničeny při ukončení funkce.
Při použití globální proměnné, používejte je opatrně, protože mohou vést k chybám a mohou se změnit kdekoli v programu. Před použitím by měly být inicializovány.
Statické proměnné
Statické proměnné mají lokální rozsah. Při ukončení funkce se však nezničí. Proto si statická proměnná uchovává svou hodnotu navždy a lze k ní přistupovat při opětovném zadání funkce. Statická proměnná je inicializována při deklaraci a potřebuje předponu static.
Následující program používá statickou proměnnou:
#include <stdio.h>
void say_hi();
int main() {
int i;
for (i = 0; i < 5; i++) { say_hi();}
return 0;}
void say_hi() {
static int calls_number = 1;
printf("Hi number %d\n", calls_number);
calls_number ++; }
Program zobrazí:
Hi number 1 Hi number 2 Hi number 3 Hi number 4 Hi number 5
Rekurzivní funkce
Uvažujme faktoriál čísla, který se vypočítá následovně 6! =6* 5 * 4 * 3 * 2 * 1.
Tento výpočet se provádí jako opakovaný výpočet faktu * (skutečnost -1), dokud se skutečnost nerovná 1.
Rekurzivní funkce je funkce, která volá sama sebe a obsahuje podmínku ukončení za účelem dokončení rekurzivních volání. V případě výpočtu faktoriálového čísla je výstupní podmínka fakt rovna 1. Rekurze funguje tak, že volání „skládá“ tak dlouho, dokud není výstupní podmínka pravdivá.
Například:
#include <stdio.h>
int factorial(int number);
int main() {
int x = 6;
printf("The factorial of %d is %d\n", x, factorial(x));
return 0;}
int factorial(int number) {
if (number == 1) return (1); /* exiting condition */
else
return (number * factorial(number - 1));
}
Program zobrazí:
The factorial of 6 is 720
Zde probíráme detaily programu:
- Deklarujeme naši rekurzivní faktoriálovou funkci, která bere celočíselný parametr a vrací faktoriál tohoto parametru. Tato funkce bude volat sama sebe a snižovat číslo, dokud není dosaženo výstupní nebo základní podmínky. Když je podmínka pravdivá, dříve vygenerované hodnoty se vzájemně vynásobí a vrátí se konečná hodnota faktoriálu.
- Deklarujeme a inicializujeme celočíselnou proměnnou s hodnotou “6″ a poté vytiskneme její faktoriálovou hodnotu voláním naší faktoriálové funkce.
Pro lepší pochopení rekurzivního mechanismu, který spočívá ve volání samotné funkce, dokud není dosaženo základního případu nebo zastavení, si prohlédněte následující tabulku.ping je dosažena podmínka a poté shromažďujeme předchozí hodnoty:
Inline funkce
Funkce v programování C se používá k uložení nejčastěji používaných instrukcí. Používá se pro modularizaci programu.
Kdykoli je funkce volána, ukazatel instrukce skočí na definici funkce. Po provedení funkce se ukazatel instrukce vrátí zpět na příkaz, odkud skočil do definice funkce.
Kdykoli používáme funkce, potřebujeme navíc ukazatel přejděte na definici funkce a vraťte se k příkazu. Abychom eliminovali potřebu takových ukazovacích hlav, používáme inline funkce.
V inline funkci je volání funkce přímo nahrazeno skutečným programovým kódem. Neskočí na žádný blok, protože všechny operace se provádějí uvnitř inline funkce.
Inline funkce se většinou používají pro malé výpočty. Nejsou vhodné, pokud se jedná o velký výpočetní výkon.
Inline funkce je podobná normální funkci s tím rozdílem, že klíčové slovo inline je umístěno před názvem funkce. Inline funkce jsou vytvořeny s následující syntaxí:
inline function_name ()
{
//function definition
}
Pojďme napsat program pro implementaci inline funkce.
inline int add(int a, int b) //inline function declaration
{
return(a+b);
}
int main()
{
int c=add(10,20);
printf("Addition:%d\n",c);
getch();
}
Výstup:
Addition: 30
Výše uvedený program demonstruje použití inline funkce pro sčítání dvou čísel. Jak vidíme, vrátili jsme sčítání na dvou číslech v rámci inline funkce pouze bez psaní dalších řádků. Během volání funkce jsme právě předali hodnoty, na kterých musíme provést sčítání.
Shrnutí
- Funkce je miniprogram nebo podprogram.
- Funkce slouží k modularizaci programu.
- Knihovna a uživatelsky definované jsou dva typy funkcí.
- Funkce se skládá z deklarace, těla funkce a části volání funkce.
- Deklarace funkce a tělo jsou povinné.
- Volání funkce může být v programu volitelné.
- C program má alespoň jednu funkci; je to hlavní funkce ().
- Každá funkce má název, datový typ návratové hodnoty nebo void, parametry.
- Každá funkce musí být definována a deklarována ve vašem programu C.
- Mějte na paměti, že obyčejný proměnné ve funkci C jsou zničeny, jakmile ukončíme volání funkce.
- Argumenty předávané funkci se nezmění, protože byly předány hodnotou žádnou adresou.
- Rozsah proměnných se označuje jako viditelnost proměnných v programu
- Existují globální a lokální proměnné C programování




