Čo je funkcia v jazyku C?
Funkcia v programovaní C je opakovane použiteľný blok kódu, ktorý uľahčuje porozumenie programu, testovanie a dá sa ľahko modifikovať bez zmeny volajúceho programu. Funkcie rozdeľujú kód a modulujú program, aby boli výsledky lepšie a efektívnejšie. Stručne povedané, väčší program je rozdelený do rôznych podprogramov, ktoré sa nazývajú ako funkcie
Keď rozdelíte veľký program na rôzne funkcie, je ľahké spravovať každú funkciu zvlášť. Kedykoľvek sa v programe vyskytne chyba, môžete ľahko zistiť chybné funkcie a opraviť iba tieto chyby. Môžete kedykoľvek zavolať a použiť funkcie, kedykoľvek sú potrebné, čo automaticky vedie k úspore času a priestoru.
V tomto návode sa naučíte
- Knižnica vs. Užívateľom definované funkcie
- Vyhlásenie o funkcii
- Definícia funkcie
- Volanie funkcie
- Argumenty funkcie
- Variabilný rozsah
- Statické premenné
- Rekurzívne funkcie
- Vložené funkcie
Knižnica vs. Užívateľom definované funkcie
Každý program „C“ má najmenej jednu funkciu, ktorá je hlavnou funkciou, ale program môže mať ľubovoľný počet funkcií. Funkcia main () v jazyku C je východiskovým bodom programu.
V programovaní „C“ sú funkcie rozdelené do dvoch typov:
- Knižničné funkcie
- Užívateľom definované funkcie
Rozdiel medzi knižničnou a používateľom definovanými funkciami v jazyku C je, že nepotrebujeme písať kód pre knižničnú funkciu. Je už obsiahnutý v hlavičkovom súbore, ktorý vždy zahrnieme na začiatku programu. Musíte len napísať názov funkcie a použiť ju spolu so správnou syntaxou. Printf, scanf sú príklady funkcií knižnice.
Zatiaľ čo používateľom definovaná funkcia je typ funkcie, v ktorej musíme napísať telo funkcie a zavolať ju, kedykoľvek požadujeme, aby funkcia vykonala v našom programe nejakú operáciu.
Užívateľom definovaná funkcia v jazyku C je vždy napísaná používateľom, neskôr však môže byť súčasťou knižnice „C“. Je to hlavná výhoda programovania „C“.
Programovacie funkcie jazyka C sú rozdelené do troch činností, napríklad
- Deklarácia funkcie
- Definícia funkcie
- Volanie funkcie
Vyhlásenie o funkcii
Deklarácia funkcie znamená napísanie názvu programu. Je povinnou časťou pre použitie funkcií v kóde. V deklarácii funkcie iba zadáme názov funkcie, ktorú budeme v našom programe používať ako deklaráciu premennej. Funkciu nemôžeme použiť, pokiaľ nie je deklarovaná v programe. Deklarácia funkcie sa nazýva aj „ prototyp funkcie “.
Deklarácie funkcií (nazývané prototypy) sa zvyčajne vykonávajú nad funkciou main () a majú všeobecnú podobu:
return_data_type function_name (data_type arguments);
- Return_data_type : je dátový typ funkcie hodnoty vrátené späť do volajúceho príkazu.
- Za názvom funkcie : nasledujú zátvorky
- Názvy argumentov s vyhláseniami o dátových typoch sú voliteľne umiestnené v zátvorkách.
Zvažujeme nasledujúci program, ktorý ukazuje, ako deklarovať kockovú funkciu na výpočet hodnoty kocky celočíselnej premennej
#include/*Function declaration*/int add(int a,b);/*End of Function declaration*/int main() {
Pamätajte, že funkcia nemusí nevyhnutne vracať hodnotu. V takom prípade sa použije kľúčové slovo void.
Deklarácia funkcie output_message napríklad naznačuje, že funkcia nevráti hodnotu: void output_message ();
Definícia funkcie
Definícia funkcie znamená iba napísanie tela funkcie. Telo funkcie pozostáva z príkazov, ktoré majú vykonať konkrétnu úlohu. Telo funkcie pozostáva z jedného alebo bloku príkazov. Je tiež povinnou súčasťou funkcie.
int add(int a,int b) //function body{int c;c=a+b;return c;}
Volanie funkcie
Volanie funkcie znamená volanie funkcie, kedykoľvek je to v programe požadované. Kedykoľvek zavoláme funkciu, vykoná operáciu, pre ktorú bola navrhnutá. Volanie funkcie je voliteľnou súčasťou programu.
result = add(4,5);
Toto je úplný kód:
#includeint add(int a, int b); //function declarationint main(){int a=10,b=20;int c=add(10,20); //function callprintf("Addition:%d\n",c);getch();}int add(int a,int b) //function body{int c;c=a+b;return c;}
Výkon:
Addition:30
Argumenty funkcie
Argumenty funkcie sa používajú na získanie potrebných hodnôt volaním funkcie. Zhodujú sa podľa polohy; prvý argument sa odovzdá prvému parametru, druhý druhému parametru atď.
V predvolenom nastavení sa argumenty odovzdávajú podľa hodnoty, v ktorej sa kópia údajov odovzdá volanej funkcii. Skutočne odovzdaná premenná sa nezmení.
Zvažujeme nasledujúci program, ktorý demonštruje parametre odovzdané 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ýstupom programu je:
5 + 10 = 15
Majte na pamäti, že hodnoty a a b, ktoré boli odovzdané do funkcie add, sa nezmenili, pretože do parametra x bola odovzdaná iba jej hodnota.
Variabilný rozsah
Variabilný rozsah znamená viditeľnosť premenných v kóde programu.
V jazyku C sú premenné deklarované vo vnútri funkcie lokálne pre tento blok kódu a nemožno ich odkazovať mimo funkcie. Premenné, ktoré sú deklarované mimo všetkých funkcií, sú však globálne a prístupné z celého programu. Konštanty deklarované s #define v hornej časti programu sú prístupné z celého programu. Uvažujeme o nasledujúcom programe, ktorý tlačí hodnotu globálnej premennej z hlavnej aj používateľom definovanej funkcie:
#includeint 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ýsledok:
from the main function : global =1348from user defined function : global =1348
Diskutujeme o detailoch programu:
- Deklarujeme celočíselnú globálnu premennú s 1348 ako počiatočnou hodnotou.
- Deklarujeme a definujeme funkciu test (), ktorá neprijíma argumenty ani nevracia hodnotu. Táto funkcia vytlačí hodnotu globálnej premennej iba na preukázanie toho, že ku globálnym premenným je možné získať prístup kdekoľvek v programe.
- Globálnu premennú vytlačíme v rámci hlavnej funkcie.
- Na vytlačenie hodnoty globálnej premennej zavoláme testovaciu funkciu v orde.
V C, keď sa argumenty odovzdávajú parametrom funkcie, pôsobia parametre ako lokálne premenné, ktoré sa pri ukončení funkcie zničia.
Ak používate globálne premenné, používajte ich opatrne, pretože môžu viesť k chybám a môžu sa meniť kdekoľvek v programe. Pred použitím by mali byť inicializované.
Statické premenné
Statické premenné majú lokálny rozsah. Pri ukončení funkcie však nie sú zničené. Preto si statická premenná zachováva svoju hodnotu navždy a je k nej možné získať prístup pri opätovnom zadaní funkcie. Statická premenná sa inicializuje, keď je deklarovaná, a vyžaduje predponu static.
Nasledujúci program používa statickú premennú:
#includevoid 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 zobrazuje:
Hi number 1Hi number 2Hi number 3Hi number 4Hi number 5
Rekurzívne funkcie
Zvážte faktoriál čísla, ktoré sa počíta podľa nasledujúcej 6! = 6 * 5 * 4 * 3 * 2 * 1.
Tento výpočet sa robí ako opakovaný výpočet faktu * (fakt -1), kým sa skutočnosť nerovná 1.
Rekurzívna funkcia je funkcia, ktorá sa sama volá a obsahuje podmienku ukončenia s cieľom dokončiť rekurzívne volania. V prípade výpočtu faktoriálneho čísla je podmienkou ukončenia skutočnosť rovná sa 1. Rekurzia funguje tak, že sa hovory ukladajú „do seba“, kým nie je splnená podmienka ukončenia.
Napríklad:
#includeint 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 */elsereturn (number * factorial(number - 1));}
Program zobrazuje:
The factorial of 6 is 720
Tu diskutujeme o podrobnostiach programu:
- Deklarujeme našu rekurzívnu faktoriálnu funkciu, ktorá prevezme celočíselný parameter a vráti faktoriál tohto parametra. Táto funkcia sa bude sama volať a bude znižovať počet, kým sa nedosiahne východzia alebo základná podmienka. Keď je podmienka pravdivá, predtým vygenerované hodnoty sa navzájom vynásobia a vráti sa konečná faktoriálna hodnota.
- Deklarujeme a inicializujeme celočíselnú premennú s hodnotou „6“ a potom vytlačíme jej faktoriálnu hodnotu volaním našej faktoriálnej funkcie.
Zvážte nasledujúci graf, aby ste lepšie pochopili rekurzívny mechanizmus, ktorý pozostáva z volania funkcie samostatne, kým sa nedosiahne základný prípad alebo stav zastavenia, a potom zhromaždíme predchádzajúce hodnoty:
Vložené funkcie
Funkcia programovania v C sa používa na uloženie najčastejšie používaných pokynov. Používa sa na modularizáciu programu.
Kedykoľvek sa volá funkcia, ukazovateľ inštrukcie preskočí na definíciu funkcie. Po vykonaní funkcie sa ukazovateľ inštrukcie vráti späť na príkaz, odkiaľ preskočil na definíciu funkcie.
Kedykoľvek používame funkcie, potrebujeme ďalšiu hlavicu ukazovateľa, aby sme skočili na definíciu funkcie a vrátili sa k príkazu. Aby sme eliminovali potrebu takýchto ukazovacích hláv, používame inline funkcie.
V inline funkcii je volanie funkcie priamo nahradené skutočným programovým kódom. Nepreskočí na žiadny blok, pretože všetky operácie sa vykonávajú vo vnútri inline funkcie.
Vložené funkcie sa väčšinou používajú pre malé výpočty. Nie sú vhodné, ak je zapojený veľký počítač.
Vložená funkcia je podobná normálnej funkcii okrem toho, že kľúčové slovo inline je umiestnené pred názvom funkcie. Vložené funkcie sa vytvárajú s nasledujúcou syntaxou:
inline function_name (){//function definition}
Poďme napísať program na implementáciu vloženej funkcie.
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ýkon:
Addition: 30
Vyššie uvedený program demonštruje použitie inline funkcie na sčítanie dvoch čísel. Ako vidíme, vrátili sme sčítanie na dvoch číslach v rámci inline funkcie iba bez toho, aby sme písali nejaké riadky navyše. Počas volania funkcie sme práve odovzdali hodnoty, na ktorých musíme vykonať sčítanie.
Zhrnutie
- Funkciou je miniprogram alebo podprogram.
- Na moduláciu programu sa používajú funkcie.
- Knižnica a sú definované používateľom sú dva typy funkcií.
- Funkcia sa skladá z deklarácie, tela funkcie a časti volania funkcie.
- Vyhlásenie o funkcii a telo sú povinné.
- Volanie funkcie môže byť v programe voliteľné.
- Program C má najmenej jednu funkciu; je to hlavná funkcia ().
- Každá funkcia má názov, dátový typ návratovej hodnoty alebo neplatnosti, parametre.
- Každá funkcia musí byť definovaná a deklarovaná vo vašom programe C.
- Majte na pamäti, že bežné premenné vo funkcii C sa zničia, akonáhle ukončíme volanie funkcie.
- Argumenty odovzdané funkcii sa nezmenia, pretože sa odovzdávali hodnotou žiadny adresou.
- Rozsah premennej sa označuje ako viditeľnosť premenných v rámci programu
- V programovaní C existujú globálne a lokálne premenné