logo

Uporabniško definirana funkcija v C

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:

  1. Prototip funkcije
  2. Definicija funkcije
  3. 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);>
Prototip funkcije

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:

  1. Funkcijski parametri
  2. Funkcijsko telo
  3. 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:

  1. Klic po vrednosti
  2. 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.