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_rezultatnume_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_parametriieste 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.
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, inti, float a);
int g (void);
apelulfunctiilor 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++.
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.
Exde
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.
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.
ObsO 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.
Document Info
Accesari:
3339
Apreciat:
Comenteaza documentul:
Nu esti inregistrat Trebuie sa fii utilizator inregistrat pentru a putea comenta