Fiecare program C este o colecție de funcții. Aflați totul despre aceste fragmente utile de cod reutilizabile, de la cum să le definiți până la ce înseamnă gol.

Este posibil să fi acoperit sintaxa C de bază, cu exemple simple și acum vă întrebați cum să creați programe mai mari, din lumea reală. Pentru început, veți dori să vă organizați codul în părți eficiente, cu un minim de repetare. În C, ca în majoritatea limbilor, răspunsul la problemele tale este funcția.

Crearea și utilizarea funcțiilor în C este simplă și aduce multe beneficii. Funcțiile vă permit să descompuneți programele complexe în bucăți mai mici. Acestea oferă reutilizabilitate, atât în ​​cadrul programului original, cât și în biblioteci conexe sau alte programe separate.

Pentru a începe, va trebui să aflați despre declarațiile de funcții, prototipuri, parametri și instrucțiuni return.

Ce sunt funcțiile în C?

În programarea C, o funcție este o secțiune de cod numită care face ceva atunci când îi ceri. Vă ajută să vă mențineți codul organizat și vă permite să utilizați aceeași acțiune de mai multe ori fără a vă repeta.

instagram viewer

Cel mai simplu exemplu este unul pe care l-ați folosit deja: funcția main(). Funcția principală este deosebit de specială deoarece acționează ca punct de intrare principal pentru orice program C. De asemenea, puteți utiliza funcții de bibliotecă, care sunt cele pe care altcineva le-a scris deja, sau puteți scrie propriile funcții definite de utilizator.

Funcții: Declarare, Definire și Apelare

Aceste trei aspecte sunt fundamentale pentru utilizarea funcțiilor.

Declarație de funcție

Aceasta oferă informații despre numele unei funcții, tipul de returnare și parametrii, permițând utilizarea acesteia înainte de definirea sa completă. Se mai numește și prototip de funcție. Urmează această sintaxă simplă:

return_type function_name(parameters);

Unde:

  • tip_return este tipul de date al valorii pe care o returnează funcția. Poate fi orice tip de date C valid sau gol dacă funcția nu returnează o valoare.
  • nume_funcție este numele pe care îl dați funcției. Veți folosi acest lucru pentru a apela funcția mai târziu.
  • parametrii este o listă de parametrii de intrare pe care funcția îi acceptă, dacă există. Fiecare parametru constă dintr-un tip de date urmat de un nume de parametru separat prin virgule.

De exemplu, iată o declarație simplă a funcției:

intadd(int a, int b);

Definiția funcției

Când apelați o funcție, aceasta rulează codul specificat în definiția acesteia. Include numele funcției, tipul de returnare, lista de parametri și instrucțiunile care definesc comportamentul acesteia. Iată sintaxa:

return_type function_name(parameters){
// Function body - code that defines what the function does
// Return a value if applicable
return value;
}

Să defalcăm părți ale sintaxei:

Corpul funcției: Acesta este blocul de cod inclus între acolade {}. Conține instrucțiunile care definesc ce face funcția atunci când este apelată.

Declarație de returnare: Dacă funcția are un alt tip de returnare decât gol, cel întoarcere instrucțiunea trimite o valoare înapoi apelantului. Această valoare ar trebui să se potrivească cu tipul de returnare specificat.

Iată un exemplu simplu de definiție a unei funcții:

intadd(int a, int b){
int sum = a + b;
return sum;
}

Apel de funcție

La fel ca la gătit, este posibil să ai o rețetă (definiția funcției) și câteva ingrediente (argumente), dar totuși trebuie să urmezi instrucțiunile pentru a obține un rezultat. Un apel de funcție va rula funcția cu argumente date; iată sintaxa:

return_type result = function_name(arguments);

argumente: Acestea sunt valorile sau expresiile pe care le transmiteți funcției ca intrări. Separați fiecare argument cu o virgulă. Numărul, ordinea și tipurile de date ale argumentelor ar trebui să se potrivească cu lista de parametri a funcției.

rezultat: Dacă funcția are un alt tip de returnare decât gol, puteți captura valoarea returnată folosind o variabilă de tipul de date adecvat.

Iată un exemplu de apel de funcție:

#include

// Function prototype
intadd(int a, int b);

intmain(){
int x = 5, y = 3;

// Call the function and store the result in 'sum'
int sum = add(x, y);
printf("The sum of %d and %d is %d\n", x, y, sum);
return0;
}

// Function definition
intadd(int a, int b){
return a + b;
}

Urmând acești trei pași - declararea funcției, furnizarea implementării acesteia și apelarea acesteia cu argumente adecvate — puteți utiliza eficient funcțiile pentru a efectua diverse sarcini în dvs program.

Parametrii funcției și valorile returnate

Parametrii sunt variabile declarate în declarația sau definiția funcției care acționează ca substituenți pentru valorile transmise funcției atunci când sunt apelate. Acestea vă permit să treceți date în funcție, permițându-i să lucreze și să manipuleze acele date. Valorile returnate sunt valorile pe care o funcție le produce și le trimite înapoi apelantului.

Există două metode de transmitere a parametrilor.

Treci după valoare

Cu această abordare, un apel de funcție copiază valoarea argumentului actual în parametrul funcției. Modificările aduse parametrului în cadrul funcției nu afectează argumentul original.

De exemplu:

#include

intsquare(int num){
num = num * num;
return num;
}

intmain(){
int x = 5;
int y = square(x);

// Output: x and y after function call: 5 25
printf("x and y after function call: %d %d\n", x, y);

return0;
}

  • Funcția pătrat ia un parametru întreg, num.
  • Funcția pătrat calculează pătratul lui num, își actualizează valoarea și returnează această nouă valoare.
  • Funcția principală declară o variabilă întreagă, Xși îi atribuie valoarea 5.
  • Apoi apelează funcția pătrat, trecându-i valoarea lui x. Acesta atribuie rezultatul unei a doua variabile, y.
  • După apelul funcției, main tipărește valorile lui x și y. Valoarea x rămâne aceeași, deoarece modificarea parametrului num în interiorul pătratului nu afectează x-ul original.

Treceți prin referință

Folosind această abordare, treceți adresa de memorie (pointerul) unei valori unei funcții. Modificările aduse parametrului din interiorul funcției afectează valoarea inițială din afara acesteia.

Pointerii, inclusiv utilizarea lor ca parametri, sunt unul dintre aspectele C care îl fac diferit de un limbaj precum Python.

#include

voidsquare(int *num){
*num = *num * *num;
}

intmain(){
int x = 5;
square(&x);

// Output: x after function call: 25
printf("x after function call: %d\n", x);
return0;
}

  • The pătrat funcția ia un pointer întreg (int *) parametru, num. Nu returnează o valoare.
  • Funcția pătrat calculează pătratul valorii care num conține și actualizează acea valoare utilizând operatorul de dereferire pointer, *.
  • The principal funcția declară o variabilă întreagă, Xși îi atribuie valoarea 5.
  • Apoi cheamă pătrat funcția cu un pointer către X folosind adresa operatorului: &X.
  • După apelul funcției, main tipărește valoarea lui X, care este acum 25 din moment ce modificările la *num în interiorul pătrat funcția afectează originalul X.

Pe scurt, diferența cheie dintre cele două metode este modul în care modificările parametrului din interiorul funcției afectează valoarea inițială din afara acesteia. Pass by value creează o copie, în timp ce trecere prin referință (pointer) permite manipularea directă a valorii originale.

Alte limbi au adesea un echivalent al indicatorilor lui C, dar în general funcționează la un nivel superior. Un exemplu este Suportul C# pentru variabilele out.

Funcții de gol

Funcțiile nule din programarea C sunt funcții care nu returnează o valoare. Folosiți-le pentru a efectua acțiuni sau sarcini fără a produce un rezultat. Ei își pot schimba parametrii folosind trecerea prin referință, dar nu trebuie.

Iată un exemplu de funcție void:

#include

// Void function with no parameters
voidgreet(){
printf("Hello, MUO!");
}

intmain(){
// Call the void function, output: "Hello, MUO!"
greet();

return0;
}

Funcțiile Void sunt utile pentru a efectua acțiuni, pentru a tipări mesaje, pentru a modifica date sau pentru a efectua sarcini fără a necesita o valoare returnată.

Explorați funcțiile din programarea C

Practicarea prin crearea de funcții vă îmbunătățește înțelegerea și aplicarea în programarea C. În plus, crește lizibilitatea codului și ușurința întreținerii. Scufundați-vă în diverse aplicații ale funcțiilor pentru a le debloca avantajele.

Când ați stăpânit elementele fundamentale ale funcțiilor C și doriți să vă provocați, luați în considerare explorarea recursiunii.