5.4. Utilizarea parametrilor si a variabilelor globale
2019/02/25 in Programare in C
Am vazut ca parametrii efectivi se utilizeaza pentru a concretiza valorile care intervin in procesul de calcul definit printr-o functie. Se obisnuieste sa se spuna ca valorile respective se "transfera" functiei prin intermediul parametrilor.
Din aceasta cauza parametrii se mai considera ca fiind o "interfata" intre functii. In limbajul C aceasta interfata este unilaterala, adica ea transfera date de la functia care face apelul, la functia apelata.
Variabilele globale reprezinta si ele o interfata intre functii. In acest caz nu se transfera date de la o functie la alta, ci orice functie are acces la valorile variabilelor globale. Daca o functie trebuie sa transfere o valoare functiei apelate, atunci aceasta are doua posibilitati:
- Sa foloseasca un parametru la care i se atribuie valoarea respectiva inainte de apel;
- Sa atribuie valoarea respectiva unei variabile globale inainte de apel.
In primul caz, functia apelata are destinat un parametru formal la care i se atribuie in mod automat valoarea respectiva la apel. In al doilea caz, functia apelata trebuie sa aiba acces la variabila globala careia i s-a atribuit valoarea de transferat. In acest scop, este necesar sa se cunoasca numele variabilei globale respective in momentul in care se programeaza functia respectiva. Acesta este un neajuns al variabilelor globale fata de parametri. Numele si sensul variabilelor globale trebuie sa fie cunoscut inainte de a incepe programarea unei functii care utilizeaza in comun variabilele respective.
Un alt dezavantaj al variabilelor globale este sursa mare de erori pe care o reprezinta. Intr-adevar, orice functie din program avand acces la o variabila globala, ea poate modifica valoarea acesteia si de aceea posibilitatea modificarii eronate este mare. De asemenea, depistarea unei astfel de erori este destul de complicata, deoarece este necesar sa se studieze un numar mare de functii (toate functiile care au acces la variabila globala a carei valoare s-a constatat ca este eronata).
In cazul utilizarii parametrilor, se realizeaza o protectie a datelor, deoarece functia apelata nu poate modifica valorile parametrilor in mod direct.
Avantajul variabilelor locale decurge din faptul ca ele reprezinta o interfata simpla intre functii, care este in ambele sensuri. O functie poate modifica valoarea unei variabile globale, modificare care ramane valabila la revenirea din ea, deci functia care a facut apelul poate beneficia de modificarea facuta prin intermediul functiei apelate. Dar chiar acest fapt se considera ca este o sursa de erori. De aceea, se considera ca nu este bine sa se exagereze cu utilizarea variabilelor globale, ele constituind o sursa de erori.
De obicei, folosim variabilele globale cand rezultatele unei functii sunt folosite in comun de mai multe functii ale programului. In rest, se recomanda utilizarea parametrilor pentru realizarea interfetelor dintre functii.