Každý program C je sbírka funkcí. Zjistěte vše o těchto užitečných opakovaně použitelných kouscích kódu, od toho, jak je definovat, až po to, co znamená void.
Možná jste probrali základní syntaxi jazyka C pomocí jednoduchých příkladů a nyní přemýšlíte, jak postupovat při vytváření větších programů v reálném světě. Pro začátek budete chtít uspořádat svůj kód do účinných částí s minimem opakování. V C, stejně jako ve většině jazyků, je odpovědí na vaše problémy funkce.
Vytváření a používání funkcí v C je jednoduché a přináší mnoho výhod. Funkce umožňují rozdělit složité programy na menší části. Poskytují opětovné použití, a to jak v rámci vašeho původního programu, tak v souvisejících knihovnách nebo jiných samostatných programech.
Chcete-li začít, budete se muset dozvědět o deklaracích funkcí, prototypech, parametrech a příkazech return.
Co jsou funkce v C?
V programování C, funkce je pojmenovaná část kódu, která něco udělá, když ji o to požádáte. Pomáhá udržovat váš kód uspořádaný a umožňuje vám použít stejnou akci vícekrát, aniž byste se opakovali.
Nejjednodušší příklad je ten, který jste již používali: funkce main(). Funkce main je obzvláště speciální, protože funguje jako hlavní vstupní bod pro jakýkoli program v jazyce C. Můžete také použít funkce knihovny, což jsou ty, které již napsal někdo jiný, nebo můžete napsat své vlastní uživatelsky definované funkce.
Funkce: Deklarace, Definice a Volání
Tyto tři aspekty jsou pro použití funkcí zásadní.
Deklarace funkce
To poskytuje informace o názvu funkce, návratovém typu a parametrech, což umožňuje její použití před její úplnou definicí. Říká se mu také funkční prototyp. Řídí se touto jednoduchou syntaxí:
return_type function_name(parameters);
Kde:
- návratový_typ je datový typ hodnoty, kterou funkce vrací. Může to být jakýkoli platný datový typ C nebo prázdnota pokud funkce nevrací hodnotu.
- název_funkce je název, který funkci přiřadíte. Toto použijete k pozdějšímu volání funkce.
- parametry je seznam vstupních parametrů, které funkce přijímá, pokud existují. Každý parametr se skládá z datového typu, za kterým následuje název parametru oddělený čárkami.
Zde je například jednoduchá deklarace funkce:
intadd(int a, int b);
Definice funkce
Když zavoláte funkci, spustí kód určený v její definici. Zahrnuje název funkce, návratový typ, seznam parametrů a příkazy, které definují její chování. Zde je syntaxe:
return_type function_name(parameters){
// Function body - code that defines what the function does
// Return a value if applicable
return value;
}
Pojďme si rozebrat části syntaxe:
Funkční tělo: Toto je blok kódu uzavřený ve složených závorkách {}. Obsahuje instrukce, které definují, co funkce dělá, když je volána.
Návratové prohlášení: Pokud má funkce návratový typ jiný než prázdnota, vrátit se příkaz odešle hodnotu zpět volajícímu. Tato hodnota by se měla shodovat se zadaným návratovým typem.
Zde je jednoduchý příklad definice funkce:
intadd(int a, int b){
int sum = a + b;
return sum;
}
Volání funkce
Stejně jako u vaření můžete mít recept (definici funkce) a některé ingredience (argumenty), ale stále musíte postupovat podle pokynů, abyste dosáhli výsledku. Volání funkce spustí funkci s danými argumenty; zde je syntaxe:
return_type result = function_name(arguments);
argumenty: Toto jsou hodnoty nebo výrazy, které předáte funkci jako vstupy. Každý argument oddělte čárkou. Počet, pořadí a datové typy argumentů by měly odpovídat seznamu parametrů funkce.
výsledek: Pokud má funkce návratový typ jiný než prázdnota, můžete zachytit vrácenou hodnotu pomocí proměnné odpovídajícího datového typu.
Zde je příklad volání funkce:
#include
// Function prototype
intadd(int a, int b);intmain(){
int x = 5, y = 3;// Call the function and store the result in 'sum'
int sum = add(x, y);
printf("The sum of %d and %d is %d\n", x, y, sum);
return0;
}
// Function definition
intadd(int a, int b){
return a + b;
}
Dodržením těchto tří kroků – deklarací funkce, poskytnutím její implementace a jejím voláním s vhodnými argumenty – můžete efektivně používat funkce k provádění různých úkolů ve vašem program.
Parametry funkcí a návratové hodnoty
Parametry jsou proměnné deklarované v deklaraci nebo definici funkce, které fungují jako zástupné symboly pro hodnoty předané funkci při volání. Umožňují vám předávat data do funkce a umožňují jí s těmito daty pracovat a manipulovat s nimi. Návratové hodnoty jsou hodnoty, které funkce vytvoří a odešle zpět volajícímu.
Existují dva způsoby předávání parametrů.
Projděte kolem hodnoty
Při tomto přístupu volání funkce zkopíruje hodnotu skutečného argumentu do parametru funkce. Změny provedené v parametru ve funkci nemají vliv na původní argument.
Například:
#include
intsquare(int num){
num = num * num;
return num;
}intmain(){
int x = 5;
int y = square(x);// Output: x and y after function call: 5 25
printf("x and y after function call: %d %d\n", x, y);
return0;
}
- Čtvercová funkce přebírá celočíselný parametr, č.
- Funkce square vypočítá druhou mocninu num, aktualizuje její hodnotu a vrátí tuto novou hodnotu.
- Hlavní funkce deklaruje celočíselnou proměnnou, Xa přiřadí mu hodnotu 5.
- Poté zavolá čtvercovou funkci a předá jí hodnotu x. Přiřadí výsledek druhé proměnné, y.
- Po volání funkce main vypíše hodnoty x a y. Hodnota x zůstává stejná, protože změna parametru num uvnitř čtverce neovlivní původní x.
Pass by Reference
Pomocí tohoto přístupu předáte funkci paměti adresu (ukazatel) hodnoty. Změny provedené v parametru uvnitř funkce ovlivní původní hodnotu mimo ni.
Ukazatele, včetně jejich použití jako parametrů, jsou jedním z aspektů C, které jej odlišují od jazyka, jako je Python.
#include
voidsquare(int *num){
*num = *num * *num;
}intmain(){
int x = 5;
square(&x);
// Output: x after function call: 25
printf("x after function call: %d\n", x);
return0;
}
- The náměstí funkce bere celočíselný ukazatel (int *) parametr, č. Nevrací hodnotu.
- Funkce square vypočítá druhou mocninu hodnoty, která č obsahuje a aktualizuje tuto hodnotu pomocí operátoru dereference ukazatele, *.
- The hlavní funkce deklaruje celočíselnou proměnnou, Xa přiřadí mu hodnotu 5.
- Poté zavolá náměstí funkce s ukazatelem na X pomocí adresy operátora: &X.
- Po volání funkce main vypíše hodnotu X, což je nyní 25 od změn na *číslo uvnitř náměstí funkce ovlivnit originál X.
Stručně řečeno, klíčový rozdíl mezi těmito dvěma metodami je v tom, jak změny parametru uvnitř funkce ovlivňují původní hodnotu mimo ni. Pass by value vytváří kopii, zatímco pass by reference (ukazatel) umožňuje přímou manipulaci s původní hodnotou.
Jiné jazyky mají často ekvivalent ukazatelů C, ale obecně fungují na vyšší úrovni. Jedním z příkladů je C# podpora pro proměnné out.
Prázdné funkce
Void funkce v programování C jsou funkce, které nevrací hodnotu. Použijte je k provádění akcí nebo úkolů, aniž by přinesly výsledek. Mohou změnit své parametry pomocí pass by reference, ale nemusí.
Zde je příklad funkce void:
#include
// Void function with no parameters
voidgreet(){
printf("Hello, MUO!");
}intmain(){
// Call the void function, output: "Hello, MUO!"
greet();
return0;
}
Funkce Void jsou užitečné pro provádění akcí, tisk zpráv, úpravu dat nebo provádění úloh bez vyžadování návratové hodnoty.
Prozkoumejte funkce v programování C
Procvičování vytvářením funkcí zlepšuje vaše chápání a aplikace v programování C. Kromě toho zvyšuje čitelnost kódu a snadnou údržbu. Ponořte se do různých aplikací funkcí a odemkněte jejich výhody.
Když jste zvládli základy funkcí C a chcete se postavit čelem, zvažte, zda se ponořit do rekurze.