Functii in c

2
FUNCTII IN C++ Un program in C este un ansamblu de functii care efectueaza o activitate bine definita. Dintre aceste functii, intotdeuna o functie este numita main si este functia care este apelata la lansarea in executie a programului. 1. Forma generala a unei functii Sintaxa unei functii este urmatoarea: tip_rezultat nume_functie (lista_de_parametrii) tip_rezultat - specifica tipul de date pe care il returneaza functia . o functie poate returna orice tip de data cu exceptia unei matrice. Daca nu este specificat nici un tip, compilatorul presupune ca acea functie returneaza un rezultat de tip intreg. lista_de_parametrii - este o lista separata prin virgule de nume de variabile si tipu 121d38b rile lor associate care primesc valorile argumentelor atunci cand este apelata functia. O functie poate sa nu aiba parametrii, caz in care lista lor este vida. Totusi parantezele sunt necesare, chiar daca nu exista parametri. In declaratiile de variabile globale ne putem referi la mai multe variabile de acelasi tip folosind o lista cu numele lor separate prin virgula. Spre deosebire de acestea variabilele locale (parametrii unei functii) trebuie declarati individual, fiecare continand atat tipul cat si numele. Ex. f(int i, int k, float j) /*corect*/ f (int i, k, float j) /*gresit*/ Fiecare functie este un bloc de cod discret. O functie nu poate avea acces la codul unei alte functii decat printr-un apel de functie. Variabilele declarate intr-o functie sunt variabile locale, adica snt create la intrarea in functia respectiva si distruse la iesirea din aceasta. Nu se poate defini o functie intr-o alta functie, deci toate functiile au aceeasi sfera de influenta. 2. Argumentele functiei Daca o functie urmeaza sa foloseasca argumente, ea trebuie sa declare variabile care accepta valori ale argumentelor. Aceste variabile sunt denumite parametri formali ai functiei. Ei se comporta ca si celelalte variabile locale din functie si sunt create la intrarea intr-o functie si distruse la iesirea din ea. Declararea parametrilor se face dupa numele functiei. 3. Apelul unei functii Apelul unei functii se face specificand numele functiei urmat de lista parametrilor actuali. Aceasta este formata din variabile, constante sau expresii compatibile ca tip cu parametrii formali, adica fiecarui parametru formal i se asociaza o variabila, o constanta sau o expresie compatibila ca tip. Daca lista de parametrii este vida, apelul se face specificand numele functiei urmat de paranteze rotunde. Ex. int f(int k, int i, float a); int g (void); apelul functiilor f si g se poate face astfel: int m, j; float b; j=g(); f (m, j+1, 12.5); 4. Prototipul unei functii. Definitia unei functii apare in cadrul fisierului sursa, inaintea fiecarui apel, numai in cazuri particulare. Definitia lipseste in cazul functiilor din biblioteci sau atunci cand functia se afla in alt fisier sursa sau proiect (in cadrul unui proiect nu se admite ca o functie sa fie definita de doua ori). Pentru ca la compilare sa se poata efectua si validarea apelurilor unei functii, limbajul C prevede declaratii fara definirea functiilor, numite prototipuri. Aceste sunt recomandate in C si impuse in C++.

Transcript of Functii in c

Page 1: Functii in c

FUNCTII IN C++

Un program in C este un ansamblu de functii care efectueaza o activitate bine definita. Dintre aceste

functii, intotdeuna o functie este numita main si este functia care este apelata la lansarea in executie a

programului. 1. Forma generala a unei functii

Sintaxa unei functii este urmatoarea: tip_rezultat nume_functie (lista_de_parametrii)

tip_rezultat - specifica tipul de date pe care il returneaza functia . o functie poate returna

orice tip de data cu exceptia unei matrice. Daca nu este specificat nici un tip, compilatorul presupune ca

acea functie returneaza un rezultat de tip intreg.

lista_de_parametrii - este o lista separata prin virgule de nume de variabile si tipu

121d38b rile lor associate care primesc valorile argumentelor atunci cand este apelata functia. O functie

poate sa nu aiba parametrii, caz in care lista lor este vida. Totusi parantezele sunt necesare, chiar daca nu

exista parametri. In declaratiile de variabile globale ne putem referi la mai multe variabile de acelasi tip folosind o

lista cu numele lor separate prin virgula. Spre deosebire de acestea variabilele locale (parametrii unei

functii) trebuie declarati individual, fiecare continand atat tipul cat si numele. Ex. f(int i, int k, float j) /*corect*/ f (int i, k, float j) /*gresit*/ Fiecare functie este un bloc de cod discret. O functie nu poate avea acces la codul unei alte

functii decat printr-un apel de functie. Variabilele declarate intr-o functie sunt variabile locale, adica snt

create la intrarea in functia respectiva si distruse la iesirea din aceasta. Nu se poate defini o functie intr-o

alta functie, deci toate functiile au aceeasi sfera de influenta. 2. Argumentele functiei Daca o functie urmeaza sa foloseasca argumente, ea trebuie sa declare variabile care accepta

valori ale argumentelor. Aceste variabile sunt denumite parametri formali ai functiei. Ei se comporta ca si

celelalte variabile locale din functie si sunt create la intrarea intr-o functie si distruse la iesirea din ea.

Declararea parametrilor se face dupa numele functiei. 3. Apelul unei functii Apelul unei functii se face specificand numele functiei urmat de lista parametrilor actuali.

Aceasta este formata din variabile, constante sau expresii compatibile ca tip cu parametrii formali, adica

fiecarui parametru formal i se asociaza o variabila, o constanta sau o expresie compatibila ca tip. Daca lista de parametrii este vida, apelul se face specificand numele functiei urmat de paranteze

rotunde. Ex. int f(int k, int i, float a); int g (void); apelul functiilor f si g se poate face astfel: int m, j; float b; j=g(); f (m, j+1, 12.5);

4. Prototipul unei functii. Definitia unei functii apare in cadrul fisierului sursa, inaintea fiecarui apel, numai in cazuri

particulare. Definitia lipseste in cazul functiilor din biblioteci sau atunci cand functia se afla in alt fisier

sursa sau proiect (in cadrul unui proiect nu se admite ca o functie sa fie definita de doua ori). Pentru ca la compilare sa se poata efectua si validarea apelurilor unei functii, limbajul C prevede

declaratii fara definirea functiilor, numite prototipuri. Aceste sunt recomandate in C si impuse in C++.

Page 2: Functii in c

Forma generala de definire a unui prototip este: tip_rezultat nume_functie (tip_1 nume_var_1, tip_2 nume_var_2, , tip_n

nume_var_n);

Ex. int f(int k, int i, float a); void g (int *p1, int *p2); Prototipurile permit compilatorului sa verifice si sa gaseasca deferentele dintre argumentele

utilizate la apelare si parametrii functiei (tipurile si numarul acestora). Folosirea numelor parametrilor este optionala. Utilizarea lor este insa recomandata deoarece

acestia pot fi utilizati de compilator in cadrul mesajelor de eroare. Ex. de prototipuri de functii, fara specificarea numelor parametrilor: int f(int, int, float); void g (int *, int *); In C lipsa parametrilor se specifica prin void. In C++ lista vida indica faptul ca functia nu are

parametrii si nu este necesara inserarea cuvantului void. Pentru functia main nu este necesar un prototip, iar lipsa parametrilor nu se mai indica prin

cuvantul void. Prototipul trebuie inserat in program (de regula la inceputul programului), inaintea oricarui apel

al functiei. Prototipurile functiilor ajuta la ocolirea greselilor inainte ca ele sa apara . in plus dau

posibilitatea verificarii corectitudinii programului, nepermitand functiilor sa fie apelate cu argumente

nepotrivite. 5. Revenirea dintr-o functie. Instructiunea return. Exista doua cai de incheiere a executiei unei functii si de revenire in programul apelant: prima

varianta de revenire are loc dupa ce se executa ultima instructiune a functiei (dupa care urmeaza acolada

de sfarsit), iar cea de-a doua varianta de revenire are loc la intalnirea instructiunii return. Sintaxa instructiunii return este urmatoarea: return expresie;

unde expresie reprezinta rezultatul intors de functie, deci acesta trebuie sa fie compatibil cu

tipul indicat de prototipul functiei. Exceptand functiile de tip void, toate functiile returneaza o valoare. Aceasta valoare este

specificata explicit de catre instructiunea return. Valori returnate. Toate functiile, cu exceptia celor de tip void, returneaza o valoare. Aceasta

valoare este specificata explicit de catre instructiunea return. Daca nu exista nici o instructiune return,

atunci valoarea returnata de functie este teoretic nedefinita. Deci, atata vreme cat o functie nu este

declarata ca fiind void, ea poate fi folosita ca operand in orice expresie valida. Obs. O functie nu poate fi niciodata tinta unei atribuiri. O instructiune de forma: modific(x,y)=100; /*instructiune incorecta*/

este gresita. Compilatorul o va taxa ca eroare si nu va compila un program care contine asa ceva. In general, la scrierea de programe in C++, functiile vor fi de trei tipuri: - functii de calcul simplu - care sunt proiectate pentru a efectua operatii asupra argumentelor

lor si a returna o valoare rezultata din aceste operatii (Ex. functiile standard de biblioteca sqrt() si

sin()care calculeaza radacina patrata, respectiv sinusul argumentelor lor); - functii ce manevreaza informatiile si returneaza o valoare care indica reusita sau nereusita

acestei manevre (Ex. functia de biblioteca fclose()care este folosita pentru a inchide un fisier- daca

operatia de inchidere a decurs cu succes, functia returneaza 0, daca operatia nu a reusit, functia returneaza

un cod de eroare); - functii care nu au o valoare returnata explicit. In esenta o astfel de functie este strict de

procedura si nu returneaza o valoare (Ex. exit() - care termina un program). Toate functiile care nu

returneaza valori trebuie declarate ca returnand tipul void.