logo

Používateľom definovaná funkcia v C

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í:



  1. Funkčný prototyp
  2. Definícia funkcie
  3. 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);>
Funkčný prototyp

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:

  1. Funkčné parametre
  2. Telo funkcie
  3. 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:

  1. Volajte podľa hodnoty
  2. 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.