A užívateľsky definovaná funkcia je typ funkcie v jazyku C, ktorá je definovaná samotným používateľom na vykonávanie nejakej konkrétnej úlohy. Poskytuje opätovné použitie kódu a modularitu nášho programu. Používateľom definované funkcie sa líšia od vstavaných funkcií, pretože ich fungovanie určuje používateľ a na ich použitie nie je potrebný žiadny hlavičkový súbor.
V tomto článku sa dozvieme o užívateľom definovaná funkcia, prototyp funkcie, definícia funkcie, volanie funkcie a rôzne spôsoby, ktorými môžeme funkcii odovzdať parametre.
Ako používať funkcie definované používateľom v jazyku C?
Aby sme mohli použiť funkciu definovanú používateľom, musíme najprv pochopiť rôzne časti jej syntaxe. Používateľom definovanú funkciu v jazyku C možno rozdeliť do troch častí:
- Funkčný prototyp
- Definícia funkcie
- Volanie funkcie
Prototyp funkcie C
Prototyp funkcie je tiež známy ako deklarácia funkcie, ktorá špecifikuje názov funkcie, parametre funkcie, a návratový typ . Prototyp funkcie neobsahuje telo funkcie. V podstate sa používa na informovanie kompilátora o existencii užívateľom definovanej funkcie, ktorú možno použiť v neskoršej časti programu.
Syntax
return_type function_name (type1 arg1 , type2 arg2 , ... typeN argN );>
Môžeme tiež preskočiť názov argumentov v prototype funkcie. takže,
return_type function_name (type1 , type2 , ... typeN);>
Definícia funkcie C
Po zavolaní funkcie obsahuje definícia funkcie skutočné príkazy, ktoré sa vykonajú. Všetky príkazy definície funkcie sú v ňom uzavreté { } rovnátka.
Syntax
return_type function_name (type1 arg1 , type2 arg2 .... typeN argN ) { // actual statements to be executed // return value if any }> Poznámka: Ak je volanie funkcie prítomné po definícii funkcie, môžeme preskočiť časť prototypu funkcie a definovať funkciu priamo.
C Volanie funkcie
Aby sme mohli preniesť riadenie na užívateľom definovanú funkciu, musíme ju zavolať. Funkcie sa volajú pomocou ich názvov, za ktorými nasledujú okrúhle zátvorky. Ich argumenty sú uvedené v zátvorkách.
Syntax
function_name(arg1, arg2, ... argN);>
Príklad funkcie definovanej používateľom
Nasledujúci program C ilustruje, ako v našom programe používať užívateľom definované funkcie.
C
// C Program to illustrate the use of user-defined function> #include> // Function prototype> int> sum(>int>,>int>);> // Function definition> int> sum(>int> x,>int> y)> {> >int> sum;> >sum = x + y;> >return> x + y;> }> // Driver code> int> main()> {> >int> x = 10, y = 11;> >// Function call> >int> result = sum(x, y);> >printf>(>'Sum of %d and %d = %d '>, x, y, result);> >return> 0;> }> |
>
>Výkon
Sum of 10 and 11 = 21>
Komponenty definície funkcie
Existujú tri zložky definície funkcie:
- Funkčné parametre
- Telo funkcie
- Návratová hodnota
1. Parametre funkcie
Parametre funkcie (známe aj ako argumenty) sú hodnoty, ktoré volajúci odovzdá volanej funkcii. Funkcii môžeme odovzdať žiadny alebo ľubovoľný počet parametrov funkcie.
V definícii funkcie musíme definovať názov funkcie a jej typ a vo volaní funkcie môžeme odovzdať len rovnaký počet a typ parametrov.
Príklad
int foo ( int a, int b) ;>
Tu, a a b sú funkčné parametre.
Poznámka: Jazyk C poskytuje metódu, pomocou ktorej môžeme funkcii odovzdať premenlivý počet argumentov. Takéto funkcie sa nazývajú variadické funkcie.
2. Telo funkcie
Telo funkcie je množina príkazov, ktoré sú uzavreté v { } zložených zátvorkách. Sú to príkazy, ktoré sa vykonajú pri volaní funkcie.
Príklad
int foo (int a, int b) { int sum = a + b; return sum; }> Tu sú vyhlásenia medzi { a } je funkcia tela.
3. Návratová hodnota
Návratová hodnota je hodnota, ktorú funkcia vráti svojmu volajúcemu. Funkcia môže vrátiť iba jednu hodnotu a je voliteľná. Ak sa nemá vrátiť žiadna hodnota, návratový typ je definovaný ako void.
The vrátiť kľúčové slovo sa používa na vrátenie hodnoty z funkcie.
Syntax
return ( expression );>
Príklad
int foo (int a, int b) { return a + b; }> Poznámka: Na vrátenie viacerých hodnôt z funkcie v C môžeme použiť ukazovatele alebo štruktúry.
reťazec java concat
Odovzdávanie parametrov užívateľsky definovaným funkciám
Parametre môžeme funkcii v C odovzdať dvoma spôsobmi:
- Volajte podľa hodnoty
- Volajte podľa referencie
1. Volajte podľa hodnoty
Pri volaní podľa hodnoty sa do funkcie odovzdá kópia hodnoty a zmeny vykonané vo funkcii sa nepremietnu späť do hodnôt. Aktuálne a formálne argumenty sa vytvárajú na rôznych pamäťových miestach.
Príklad
C
// C program to show use of> // call by value> #include> void> swap(>int> a,>int> b)> {> >int> temp = a;> >a = b;> >b = temp;> }> // Driver code> int> main()> {> >int> x = 10, y = 20;> >printf>(>'Values of x and y before swap are: %d, %d
'>, x,> >y);> >swap(x, y);> >printf>(>'Values of x and y after swap are: %d, %d'>, x,> >y);> >return> 0;> }> |
>
>Výkon
Values of x and y before swap are: 10, 20 Values of x and y after swap are: 10, 20>
Poznámka: Hodnoty sa vo volaní podľa hodnoty nemenia, pretože sa nepredávajú odkazom.
2. Zavolajte podľa referencie
Pri volaní pomocou odkazu sa adresa argumentu odovzdá funkcii a zmeny vykonané vo funkcii sa premietnu späť do hodnôt. Používame ukazovatele požadovaného typu na získanie adresy vo funkcii.
Príklad
C
// C program to implement> // Call by Reference> #include> void> swap(>int>* a,>int>* b)> {> >int> temp = *a;> >*a = *b;> >*b = temp;> }> // Driver code> int> main()> {> >int> x = 10, y = 20;> >printf>(>'Values of x and y before swap are: %d, %d
'>, x,> >y);> >swap(&x, &y);> >printf>(>'Values of x and y after swap are: %d, %d'>, x,> >y);> >return> 0;> }> |
>
>Výkon
Values of x and y before swap are: 10, 20 Values of x and y after swap are: 20, 10>
Ďalšie podrobnosti nájdete v tomto článku – Rozdiel medzi hovorom podľa hodnoty a hovorom podľa referencie
Výhody užívateľsky definovaných funkcií
Výhody používania funkcií v programe sú nasledovné:
- Pomocou funkcií sa dá vyhnúť duplicite kódu v programoch. Kód môže byť napísaný rýchlejšie a vďaka tomu môže byť čitateľnejší.
- Kód je možné rozdeliť a dobyť pomocou funkcií. Tento proces je známy ako Rozdeľuj a panuj. Je ťažké písať veľké množstvo kódu v rámci hlavnej funkcie, ako aj testovať a ladiť. Naša jedna úloha sa dá pomocou funkcií rozdeliť na niekoľko menších čiastkových úloh, čím sa zníži celková náročnosť.
- Napríklad pri použití pow, sqrt atď. v C bez toho, aby ste vedeli, ako je implementovaný, je možné skryť detaily implementácie pomocou funkcií.
- S malými alebo žiadnymi úpravami možno funkcie vyvinuté v jednom programe použiť v inom, čím sa skráti čas vývoja.