A uporabniško definirana funkcija je vrsta funkcije v jeziku C, ki jo definira uporabnik sam za izvajanje določene naloge. Našemu programu zagotavlja ponovno uporabnost kode in modularnost. Uporabniško določene funkcije se razlikujejo od vgrajenih funkcij, saj njihovo delovanje določi uporabnik in za njihovo uporabo ni potrebna datoteka glave.
V tem članku bomo spoznali uporabniško definirana funkcija, prototip funkcije, definicija funkcije, klic funkcije in različni načini, na katere lahko funkciji posredujemo parametre.
Kako uporabljati uporabniško definirane funkcije v C?
Za uporabo uporabniško definirane funkcije moramo najprej razumeti različne dele njene sintakse. Uporabniško definirano funkcijo v C lahko razdelimo na tri dele:
- Prototip funkcije
- Definicija funkcije
- Klic funkcije
Prototip funkcije C
Prototip funkcije je znan tudi kot deklaracija funkcije, ki določa ime funkcije, parametri funkcije, in povratni tip . Prototip funkcije ne vsebuje telesa funkcije. V osnovi se uporablja za obveščanje prevajalnika o obstoju uporabniško definirane funkcije, ki jo je mogoče uporabiti v kasnejšem delu programa.
Sintaksa
return_type function_name (type1 arg1 , type2 arg2 , ... typeN argN );>
Prav tako lahko preskočimo ime argumentov v prototipu funkcije. Torej,
return_type function_name (type1 , type2 , ... typeN);>
C Definicija funkcije
Ko je funkcija enkrat poklicana, definicija funkcije vsebuje dejanske stavke, ki bodo izvedeni. Vsi stavki definicije funkcije so priloženi {} naramnice.
Sintaksa
return_type function_name (type1 arg1 , type2 arg2 .... typeN argN ) { // actual statements to be executed // return value if any }> Opomba: Če je klic funkcije prisoten po definiciji funkcije, lahko preskočimo del prototipa funkcije in neposredno definiramo funkcijo.
Klic funkcije C
Da bi prenesli nadzor na uporabniško definirano funkcijo, jo moramo poklicati. Funkcije se kličejo z uporabo njihovih imen, ki jim sledijo okrogli oklepaji. Njihovi argumenti so podani v oklepajih.
Sintaksa
function_name(arg1, arg2, ... argN);>
Primer uporabniško definirane funkcije
Naslednji program C prikazuje uporabo uporabniško definiranih funkcij v našem programu.
C
oblikovalnik nizov
// 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;> }> |
>
>Izhod
Sum of 10 and 11 = 21>
Komponente definicije funkcije
Obstajajo tri komponente definicije funkcije:
- Funkcijski parametri
- Funkcijsko telo
- Povratna vrednost
1. Funkcijski parametri
Funkcijski parametri (znani tudi kot argumenti) so vrednosti, ki jih klicatelj posreduje klicani funkciji. Funkciji lahko posredujemo nobenega ali poljubno število funkcijskih parametrov.
V definiciji funkcije moramo definirati ime funkcije in njen tip, pri klicu funkcije pa lahko posredujemo samo isto število in vrsto parametrov.
Primer
int foo ( int a, int b) ;>
tukaj, a in b so parametri funkcije.
Opomba: Jezik C ponuja metodo, s katero lahko funkciji posredujemo spremenljivo število argumentov. Takšne funkcije imenujemo variadna funkcija.
2. Funkcijsko telo
Telo funkcije je nabor stavkov, ki so v oklepajih { }. To so stavki, ki se izvedejo, ko se funkcija pokliče.
Primer
int foo (int a, int b) { int sum = a + b; return sum; }> Tukaj so izjave med { in } je funkcionalno telo.
3. Povratna vrednost
Vrnjena vrednost je vrednost, ki jo funkcija vrne klicalcu. Funkcija lahko vrne samo eno vrednost in ni obvezna. Če ni vrnjena nobena vrednost, je vrsta vrnitve definirana kot void.
The povratna ključna beseda se uporablja za vrnitev vrednosti iz funkcije.
Sintaksa
return ( expression );>
Primer
int foo (int a, int b) { return a + b; }> Opomba: Za vrnitev več vrednosti iz funkcije v C lahko uporabimo kazalce ali strukture.
Posredovanje parametrov uporabniško definiranim funkcijam
Parametre lahko posredujemo funkciji v C z uporabo dveh metod:
- Klic po vrednosti
- Klic po referenci
1. Klic po vrednosti
Pri klicu po vrednosti se kopija vrednosti posreduje funkciji in spremembe, ki so narejene v funkciji, se ne odražajo nazaj v vrednostih. Dejanski in formalni argumenti so ustvarjeni na različnih pomnilniških lokacijah.
Primer
C
java števec
// 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;> }> |
gostitelj linux
>
>Izhod
Values of x and y before swap are: 10, 20 Values of x and y after swap are: 10, 20>
Opomba: Vrednosti se v klicu ne spremenijo po vrednosti, ker niso posredovane po sklicu.
2. Klic po referenci
Pri klicu s sklicevanjem se naslov argumenta posreduje funkciji, spremembe, ki so narejene v funkciji, pa se odražajo nazaj v vrednostih. Uporabljamo kazalci zahtevanega tipa za sprejem naslova v funkciji.
Primer
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;> }> |
>
>Izhod
Values of x and y before swap are: 10, 20 Values of x and y after swap are: 20, 10>
Za več podrobnosti glejte ta članek – Razlika med klicem po vrednosti in klicem po sklicu
Prednosti uporabniško definiranih funkcij
Prednosti uporabe funkcij v programu so naslednje:
- Z uporabo funkcij se lahko izognemo podvajanju kode v programih. Kodo je mogoče napisati hitreje in je posledično bolj berljiva.
- Kodo je mogoče razdeliti in osvojiti s pomočjo funkcij. Ta postopek je znan kot deli in vladaj. Težko je napisati velike količine kode znotraj glavne funkcije, pa tudi testiranje in odpravljanje napak. Našo nalogo lahko z uporabo funkcij razdelimo na več manjših podnalog, s čimer zmanjšamo celotno kompleksnost.
- Na primer, ko uporabljate pow, sqrt itd. v C, ne da bi vedeli, kako je implementiran, lahko skrijete podrobnosti implementacije s funkcijami.
- Z malo ali brez sprememb lahko funkcije, razvite v enem programu, uporabite v drugem, kar skrajša čas razvoja.