Každý program v jazyku C je súborom funkcií. Zistite všetko o týchto užitočných opakovane použiteľných kúskoch kódu, od toho, ako ich definovať, až po to, čo znamená neplatné.
Možno ste prebrali základnú syntax jazyka C s jednoduchými príkladmi a teraz sa pýtate, ako postupovať pri vytváraní väčších programov v reálnom svete. Na začiatok budete chcieť zorganizovať svoj kód do efektívnych častí s minimom opakovania. V C, rovnako ako vo väčšine jazykov, je odpoveďou na vaše problémy funkcia.
Vytváranie a používanie funkcií v C je jednoduché a prináša mnoho výhod. Funkcie vám umožňujú rozdeliť zložité programy na menšie časti. Poskytujú opätovnú použiteľnosť v rámci vášho pôvodného programu, ako aj v súvisiacich knižniciach alebo iných samostatných programoch.
Na začiatok sa budete musieť dozvedieť o deklaráciách funkcií, prototypoch, parametroch a návratových príkazoch.
Čo sú funkcie v C?
V programovaní v C, funkcia je pomenovaná časť kódu, ktorá robí niečo, keď ju o to požiadate. Pomáha udržiavať kód organizovaný a umožňuje vám použiť rovnakú akciu viackrát bez toho, aby ste sa museli opakovať.
Najjednoduchší príklad je ten, ktorý ste už používali: funkcia main(). Hlavná funkcia je obzvlášť špeciálna, pretože funguje ako hlavný vstupný bod pre akýkoľvek program v jazyku C. Môžete tiež použiť funkcie knižnice, čo sú tie, ktoré už napísal niekto iný, alebo môžete napísať svoje vlastné funkcie definované používateľom.
Funkcie: deklarovanie, definovanie a volanie
Tieto tri aspekty sú základom používania funkcií.
Vyhlásenie o funkcii
Poskytuje informácie o názve funkcie, návratovom type a parametroch, čo umožňuje jej použitie pred jej úplnou definíciou. Nazýva sa aj funkčný prototyp. Nasleduje táto jednoduchá syntax:
return_type function_name(parameters);
Kde:
- return_type je dátový typ hodnoty, ktorú funkcia vracia. Môže to byť akýkoľvek platný dátový typ C resp neplatné ak funkcia nevracia hodnotu.
- názov_funkcie je názov, ktorý dáte funkcii. Toto použijete na volanie funkcie neskôr.
- parametre je zoznam vstupných parametrov, ktoré funkcia akceptuje, ak nejaké existujú. Každý parameter pozostáva z typu údajov, za ktorým nasleduje názov parametra oddelený čiarkami.
Tu je napríklad jednoduchá deklarácia funkcie:
intadd(int a, int b);
Definícia funkcie
Keď zavoláte funkciu, spustí kód špecifikovaný v jej definícii. Zahŕňa názov funkcie, návratový typ, zoznam parametrov a príkazy, ktoré definujú jej správanie. Tu je syntax:
return_type function_name(parameters){
// Function body - code that defines what the function does
// Return a value if applicable
return value;
}
Poďme si rozobrať časti syntaxe:
Funkčné telo: Toto je blok kódu uzavretý v zložených zátvorkách {}. Obsahuje inštrukcie, ktoré definujú, čo funkcia robí, keď je volaná.
Návratový výpis: Ak má funkcia návratový typ iný ako neplatné, vrátiť príkaz pošle hodnotu späť volajúcemu. Táto hodnota by sa mala zhodovať so zadaným typom návratu.
Tu je jednoduchý príklad definície funkcie:
intadd(int a, int b){
int sum = a + b;
return sum;
}
Volanie funkcie
Rovnako ako pri varení môžete mať recept (definíciu funkcie) a niektoré ingrediencie (argumenty), ale aj tak musíte postupovať podľa pokynov, aby ste dosiahli výsledok. Volanie funkcie spustí funkciu s danými argumentmi; tu je syntax:
return_type result = function_name(arguments);
argumenty: Toto sú hodnoty alebo výrazy, ktoré odovzdávate funkcii ako vstupy. Každý argument oddeľte čiarkou. Počet, poradie a dátové typy argumentov by sa mali zhodovať so zoznamom parametrov funkcie.
výsledok: Ak má funkcia návratový typ iný ako neplatné, môžete vrátenú hodnotu zachytiť pomocou premennej vhodného typu údajov.
Tu je príklad volania funkcie:
#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žaním týchto troch krokov – deklarovaním funkcie, poskytnutím jej implementácie a jej volaním s vhodnými argumentmi – môžete efektívne využívať funkcie na vykonávanie rôznych úloh vo svojom program.
Parametre funkcie a návratové hodnoty
Parametre sú premenné deklarované v deklarácii alebo definícii funkcie, ktoré fungujú ako zástupné symboly pre hodnoty odovzdané funkcii pri volaní. Umožňujú vám odovzdať údaje do funkcie, čo jej umožní pracovať s týmito údajmi a manipulovať s nimi. Návratové hodnoty sú hodnoty, ktoré funkcia vytvorí a odošle späť volajúcemu.
Existujú dva spôsoby odovzdávania parametrov.
Prejdite okolo hodnoty
Pri tomto prístupe volanie funkcie skopíruje hodnotu skutočného argumentu do parametra funkcie. Zmeny vykonané v parametri vo funkcii neovplyvnia pôvodný argument.
Naprí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;
}
- Funkcia štvorca má celočíselný parameter, č.
- Funkcia square vypočíta druhú mocninu num, aktualizuje jej hodnotu a vráti túto novú hodnotu.
- Hlavná funkcia deklaruje celočíselnú premennú, Xa priradí mu hodnotu 5.
- Potom zavolá funkciu štvorca a odovzdá jej hodnotu x. Výsledok priradí druhej premennej, r.
- Po volaní funkcie main vypíše hodnoty x a y. Hodnota x zostáva rovnaká, pretože zmena parametra num vo vnútri štvorca neovplyvní pôvodné x.
Prejdite podľa referencie
Pomocou tohto prístupu odovzdáte pamäťovú adresu (ukazovateľ) hodnoty funkcii. Zmeny vykonané v parametri vo vnútri funkcie ovplyvnia pôvodnú hodnotu mimo nej.
Ukazovatele, vrátane ich použitia ako parametrov, sú jedným z aspektov C, ktoré ho odlišujú od jazyka ako 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ámestie funkcia berie celočíselný ukazovateľ (int *) parameter, č. Nevracia hodnotu.
- Funkcia štvorca vypočíta druhú mocninu hodnoty, ktorá č obsahuje a aktualizuje túto hodnotu pomocou operátora dereferencie ukazovateľa, *.
- The Hlavná funkcia deklaruje celočíselnú premennú, Xa priradí mu hodnotu 5.
- Potom zavolá námestie funkcia s ukazovateľom na X pomocou adresy operátora: &X.
- Po volaní funkcie main vypíše hodnotu X, čo je teraz 25 od zmien na *číslo vnútri námestie funkcia ovplyvňuje originál X.
Stručne povedané, kľúčový rozdiel medzi týmito dvoma metódami je v tom, ako zmeny parametra vo vnútri funkcie ovplyvňujú pôvodnú hodnotu mimo nej. Pass by value vytvára kópiu, zatiaľ čo pass by referenciou (ukazovateľ) umožňuje priamu manipuláciu s pôvodnou hodnotou.
Iné jazyky majú často ekvivalent ukazovateľov C, ale vo všeobecnosti fungujú na vyššej úrovni. Jedným z príkladov je Podpora C# pre out premenné.
Neplatné funkcie
Void funkcie v programovaní C sú funkcie, ktoré nevracajú hodnotu. Použite ich na vykonávanie akcií alebo úloh bez výsledku. Môžu zmeniť svoje parametre pomocou prechodu odkazom, ale nemusia.
Tu je príklad funkcie void:
#include
// Void function with no parameters
voidgreet(){
printf("Hello, MUO!");
}intmain(){
// Call the void function, output: "Hello, MUO!"
greet();
return0;
}
Funkcie rušenia sú užitočné na vykonávanie akcií, tlač správ, úpravu údajov alebo vykonávanie úloh bez potreby návratovej hodnoty.
Preskúmajte funkcie v programovaní C
Cvičenie prostredníctvom vytvárania funkcií zlepšuje vaše pochopenie a aplikáciu v programovaní v C. Okrem toho zvyšuje čitateľnosť kódu a jednoduchú údržbu. Ponorte sa do rôznych aplikácií funkcií a odomknite ich výhody.
Keď ste si osvojili základy funkcií C a chcete sa vyzvať, zvážte ponorenie sa do rekurzie.