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ť.

instagram viewer

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.