Sunteți pe pagina 1din 1

VARIABILE Compilatorul C aloc memorie variabilelor din program de dimensiune corespunztoare tipului fiecreia.

Memoria se aloc n 2 moduri:static, repartizat ntro zon special asociat programului; dinamic, repartizat ntro zon special numit stiv (se comport ca o list LIFO). n funcie de modul cum se aloc memorie, vom distinge mai multe clase de variabile. O prim clas de variabile este aceea a variabilelor globale crora li se aloc memorie pe toatdurata execuiei programului i ele pot fi utilizate n orice funcie a programului. Alt clas devariabile este clasa variabilelor locale, aceste variabile au o utilizare local la nivelul unei funcii. VARIABILE GLOBALE O variabil global are o definiie i attea declaraii de variabil extern cte sunt necesare. Definiia unei variabile globale coincide sintactic cu o declaraie obinuit, dar care este scris nafara oricrei funcii a programului (fiierului surs). Implicit, definiia unei variabile globaledetermin ca variabila respectiv s fie definit ncepnd din punctul scrierii ei i pn lasfritul fiierului surs respectiv. De aceea se recomand ca definiiile variabilelor globale s fiescrise la nceputul fiierului surs, pentru a fi accesate n orice funcie a fiierului. Pentru a utiliza variabilele globale i n alte funcii situate n alte fiiere surs dect n cel n caresunt definite, ele trebuie declarate ca externe n funciile respective. O declaraie de variabil extern coincide cu o declaraie obinuit doar c ncepe cu cuvntul cheie extern. Exemplu: fiierul n care sunt declarate ca variabile globale fiierul n care sunt folosite ca variabile externe int i;float f; void functie(. . .)void main(void) { extern int i;{ i = 10; extern double f;. . . . . . f = 3.14; f = f*i;. . . . . .} } Variabilele i i f sunt declarate n afara funciei main i n afara oricrei funcii, deci suntvariabile globale. Ele pot fi folosite n toate funciile din fiierul surs care conine definiiile lor.Pentru a le utiliza n funcii situate n alte fiiere surs dect n cel n care sunt definite ele suntdeclarate ca externe. Deci variabilele i i f sunt declarate ca externe n funcia functie din aldoilea fiier surs. Cele dou fiiere surs care pot fi scrise n momente i de persoane diferite se pot asambla ntr-un singur program cu ajutorul directivei de preprocesare include. VARIABILE LOCALE Variabilele locale nu sunt valabile n tot programul. Ele au o utilizare local n dou feluri: ca i variabile automatice (alocate pe stiv) la nivelul unei funcii; ca i variabile statice (alocate n zona programului) la nivel de fiier (eventual i la nivelul uneifuncii). Variabilele declarate n interiorul unei funcii i care nu sunt declarate ca externe sunt variabilelocale. Lor li se aloc memorie pe stiv la intrarea n funcia n care sunt declarate. La ieirea dinfuncie, stiva se reface la coninutul dinaintea apelului i variabilele locale pierd alocarea. Deciori de cte ori se apeleaz o funcie, variabilele locale acesteia (denumite i variabile automatice)se aloc (primesc memorie) pe stiv i la ieirea din funcie variabilele locale sunt terse dinstiv. Variabilele locale pot s nu fie alocate pe stiv, ci ntr-o zon de memorie destinat acestui scop.O astfel de variabil local se numete variabil static. O variabil local static se declar printr-o declaraie obinuit, precedat de cuvntul cheie static. O variabil static poate fideclarat att n corpul unei funcii ct i n afara oricrei funcii. n cazul unei variabile staticedeclarat n interiorul unei funcii alocarea nu se face pe stiv ci ntr-o zon de memorie destinatacestui scop, aceasta fiind deosebirea esenial fa de variabilele automatice. n cazul n care ovariabil static este declarat n afara funciilor, ea este definit din punctul n care a fostdeclarat i pn la sfritul fiierului surs care conine declaraia ei. Spre deosebire de variabilele globale, o variabil static nu poate fi declarat ca extern i deci nu poate fi utilizatn funciile din alte fiiere surs diferite de cel n care a fost declarat. Se recomand ca tablourile mari s fie declarate statice, deoarece dac sunt automatice potdepi capacitatea stivei (care are implicit 4K octei).