A funcţie definită de utilizator este un tip de funcție în limbajul C care este definită de utilizator însuși pentru a îndeplini o anumită sarcină. Oferă reutilizarea codului și modularitatea programului nostru. Funcțiile definite de utilizator sunt diferite de funcțiile încorporate, deoarece funcționarea lor este specificată de utilizator și nu este necesar niciun fișier de antet pentru utilizarea lor.
În acest articol, vom afla despre funcție definită de utilizator, prototip de funcție, definiție de funcție, apel de funcție și diferite moduri în care putem transmite parametrii unei funcții.
Cum se utilizează funcțiile definite de utilizator în C?
Pentru a utiliza o funcție definită de utilizator, mai întâi trebuie să înțelegem diferitele părți ale sintaxei acesteia. Funcția definită de utilizator în C poate fi împărțită în trei părți:
- Funcție Prototip
- Definiția funcției
- Apel de funcție
Prototipul funcției C
Un prototip de funcție este cunoscut și ca declarație de funcție care specifică numele funcției, parametrii funcției, și tip de returnare . Prototipul funcției nu conține corpul funcției. În principiu, este folosit pentru a informa compilatorul despre existența funcției definite de utilizator care poate fi utilizată în partea ulterioară a programului.
Sintaxă
return_type function_name (type1 arg1 , type2 arg2 , ... typeN argN );>
De asemenea, putem sări peste numele argumentelor din prototipul funcției. Asa de,
return_type function_name (type1 , type2 , ... typeN);>
C Definiția funcției
Odată ce funcția a fost apelată, definiția funcției conține instrucțiunile efective care vor fi executate. Toate instrucțiunile definiției funcției sunt incluse în { } bretele.
Sintaxă
return_type function_name (type1 arg1 , type2 arg2 .... typeN argN ) { // actual statements to be executed // return value if any }> Notă: Dacă apelul funcției este prezent după definirea funcției, putem sări peste partea de prototip al funcției și definim direct funcția.
C Apel de funcție
Pentru a transfera controlul către o funcție definită de utilizator, trebuie să o apelăm. Funcțiile sunt numite folosind numele lor urmate de paranteze rotunde. Argumentele lor sunt trecute între paranteze.
Sintaxă
function_name(arg1, arg2, ... argN);>
Exemplu de funcție definită de utilizator
Următorul program C ilustrează modul de utilizare a funcțiilor definite de utilizator în programul nostru.
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;> }> |
>
>Ieșire
Sum of 10 and 11 = 21>
Componentele definirii funcției
Există trei componente ale definiției funcției:
- Parametrii funcției
- Funcția Corp
- Valoare returnată
1. Parametrii funcției
Parametrii funcției (cunoscuți și ca argumente) sunt valorile care sunt transmise funcției apelate de apelant. Nu putem transmite niciunul sau orice număr de parametri funcției funcției.
Trebuie să definim numele funcției și tipul acesteia în definiția funcției și putem trece doar același număr și același tip de parametri în apelul funcției.
Exemplu
int foo ( int a, int b) ;>
Aici, A și b sunt parametrii funcției.
Notă: Limbajul C oferă o metodă prin care putem trece un număr variabil de argumente funcției. Astfel de funcții se numesc funcție variadică.
2. Funcție Corp
Corpul funcției este setul de instrucțiuni care sunt incluse între acolade { }. Sunt instrucțiunile care sunt executate atunci când funcția este apelată.
Exemplu
int foo (int a, int b) { int sum = a + b; return sum; }> Iată, declarațiile dintre { și } este corp funcțional.
3. Valoarea de returnare
Valoarea returnată este valoarea returnată de funcție apelantului său. O funcție poate returna doar o singură valoare și este opțională. Dacă nu trebuie returnată nicio valoare, tipul de returnare este definit ca nul.
The cuvânt cheie return este folosit pentru a returna valoarea dintr-o funcție.
Sintaxă
return ( expression );>
Exemplu
int foo (int a, int b) { return a + b; }> Notă: Putem folosi pointeri sau structuri pentru a returna mai multe valori dintr-o funcție din C.
Transmiterea parametrilor la funcțiile definite de utilizator
Putem trece parametri unei funcții în C folosind două metode:
- Apel după valoare
- Apel prin referință
1. Apel după valoare
În apelul după valoare, o copie a valorii este transmisă funcției și modificările care sunt făcute funcției nu sunt reflectate înapoi în valori. Argumentele reale și formale sunt create în diferite locații de memorie.
Exemplu
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;> }> |
>
>Ieșire
Values of x and y before swap are: 10, 20 Values of x and y after swap are: 10, 20>
Notă: Valorile nu sunt modificate în apel după valoare, deoarece nu sunt transmise prin referință.
2. Apelați prin referință
Într-un apel prin referință, adresa argumentului este transmisă funcției, iar modificările care sunt făcute funcției sunt reflectate înapoi la valori. Noi folosim indicatoare de tipul necesar pentru a primi adresa în funcție.
Exemplu
C
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;> }> |
>
>Ieșire
Values of x and y before swap are: 10, 20 Values of x and y after swap are: 20, 10>
Pentru mai multe detalii, consultați acest articol – Diferența dintre Apel după valoare și Apel prin referință
Avantajele funcțiilor definite de utilizator
Avantajele utilizării funcțiilor în program sunt următoarele:
- Se poate evita duplicarea codului în programe prin utilizarea funcțiilor. Codul poate fi scris mai rapid și, ca rezultat, poate fi mai lizibil.
- Codul poate fi împărțit și cucerit folosind funcții. Acest proces este cunoscut sub numele de Divide and Conquer. Este dificil să scrieți cantități mari de cod în cadrul funcției principale, precum și testarea și depanarea. Singura noastră sarcină poate fi împărțită în mai multe sub-sarcini mai mici prin utilizarea funcțiilor, reducând astfel complexitatea generală.
- De exemplu, atunci când utilizați pow, sqrt etc. în C fără a ști cum este implementat, se pot ascunde detaliile de implementare cu funcții.
- Cu puține sau deloc modificări, funcțiile dezvoltate într-un program pot fi utilizate în altul, reducând timpul de dezvoltare.