Sunteți pe pagina 1din 15

West University of Timisoara

Faculty of Mathematics and Informatics Programming I

Limbajul de Programare C

08.04.21 Lucian Cucu - The C Programming Language 1


West University of Timisoara
Faculty of Mathematics and Informatics Programming I

DATe: variabile...

Termeni:

obiect,
lvalue,
declaratii de variabile,
clasa de memorare a unei variabile,
identificatori,
domeniul unui identificator ,
visibilitatea unei variabile,
durata de viata a unei variabile,
linkage-ul unui identificator

08.04.21 Lucian Cucu - The C Programming Language 2


West University of Timisoara
Faculty of Mathematics and Informatics Programming I

Date: obiecte si lvalues

Obiecte si …Lvalues Memory


Un obiect este o zona identificabila de memorie;
Un lvalue este o expresie care face referire la un obiect.
count:
count = 1; 01
00
1=2-1

Nota. Denumirea ``lvalue'' provine de la expresiile de atribuire de genul E1 = E2 in care operandul din
dreapta operatorului trebuie sa fie o expresiie care se refera la un obiect, adica o zona de memorie unde
trebuie stocata valoarea expresiei din partea dreapta.

08.04.21 Lucian Cucu - The C Programming Language 3


West University of Timisoara
Faculty of Mathematics and Informatics Programming I

Date: declaratii de variabile


Nume_de_tip nume_de_variabila; Nume_de_tip nume_de_variabila = expresie;

Nume_de_tip :
- numele unui tip de baza (fundamental) de date C
Tipuri de baza C:
- char, short, int, long
- unsigned char, unsigned short, unsigned int, unsigned long
- signed char, signed short, signed int, signed long
- float, double, long double
e.g.
- numele oricarui tip de date definit de utilizator char c;
e.g: point, date, coord, person, …
unsigned int i,j;
point origin, p;
int count=0;

Nume_de_tip variable_name [expresie_constanta];


e.g.
int a[100];
int b[N]; /* #define N 100 */

08.04.21 Lucian Cucu - The C Programming Language 4


West University of Timisoara
Faculty of Mathematics and Informatics Programming I

Date: declaratii de variabile (continuare)

Orice declaratie de variabila poate fi precedata de unul sau mai multi


modificatori de decalaratie.
Sintaxa
[modificator] Nume_de_tip nume_de_variabila;

Exemple de modificatori:
• short, long
• signed, unsigned,
• const,
• static, register, extern,
• volatile

08.04.21 Lucian Cucu - The C Programming Language 5


West University of Timisoara
Faculty of Mathematics and Informatics Programming I

Date: declaratii de variabile (continuare)

Declaratia, pozitia si eventualii modificatori determina anumite atribute ale


– ale variabilei:
- unde este creata (clasa de memorare)
- cat timp exista (durata de viata)
- daca este initializata implicit
- daca valoarea sa poate fi modificata
- unde este vizibila (visibility)
sau
– ale identificatorului (numele) variabilei:
- domeniul
- linkage-ul

08.04.21 Lucian Cucu - The C Programming Language 6


West University of Timisoara
Faculty of Mathematics and Informatics Programming I

DATE: clasa de memorare

Clasa de memorare a unui obiect indica locul din memorie unde este creat!

Obiectele (variabilele) pot fi create:


– in zona datelor statice
– pe stiva
– intr-un a registru de date

08.04.21 Lucian Cucu - The C Programming Language 7


West University of Timisoara
Faculty of Mathematics and Informatics Programming I

DATE: clasa de memorare (continuare)


Memory
Processor 0 O
1
2 S
3
4
5
Data registers
Address register count:
0
state:
0 st
at
Program Counter 0
D
ic P
ALU 0
. Instruction Register
R
. A O
. Stack Pointer G
T
t o R
au
z:
A A
-27365
y: 706
M
x: -28793
results
ta
I/O devices code, da CODE

8 bits
08.04.21 Lucian Cucu - The C Programming Language 8
West University of Timisoara
Faculty of Mathematics and Informatics Programming I

DATE: specificarea clasei de memorare

• implicit (in functie de locul declaratiei)


•objectele globale au clasa de memorare static
•objectele locale au clasa de memorare automatica

• explicit (prin utilizareade modificatori de clasa de memorare in declaratie)


#include <stdio.h>
modificatori de clasa de memorare : #define N 100
•static
int count;
•auto void func(int ,int );
•register int main()
•extern {
register int i;
count=0;
for(i=0; i<N; i = i+1,)
func(i, count*2+1);
printf("no. of calls: %d\n", count);
return 0;
}

void func(int x, int y)


{int z = count*3;
static int state;
state = state + x*x + y - z;
printf("iteration%d: state=%d", ++count, state);
}

08.04.21 Lucian Cucu - The C Programming Language 9


West University of Timisoara
Faculty of Mathematics and Informatics Programming I

DATE: clasa de memorare (continuare)


Memory

Processor 0 O
1
2 S
3
4
5
Data registers
Address register count:
0
state:
0
Static
s Data Area
Program Counter 0
D
ta
ti P
ALU 0 c
. Instruction Register
R
. A O
i: 0
. Stack Pointer G
T
R
A u to A
z:
-27365
a
y: 706
Stack M
Storage classes
•static
x: -28793
results
•auto
ta
•register I/O devices code, da CODE

8 bits
08.04.21 Lucian Cucu - The C Programming Language 10
West University of Timisoara
Faculty of Mathematics and Informatics Programming I

DATE: Durata de viata a obiectelor

Durata de viata a unui obiect este portiunea din timpul de executie al


programului in care este garantata existenta spatiului de memorie pentru
stocarea sa. Un obiect exista, are o adresa fixa si isi pastreaza ultima
valoare stocata de lungul duratei sale de viata.

Durata de viata a unui obiect (variabila) este determinata de durata zonei de memorie
in care e stocat
Durata zonei de memorie :
– statica: obiectele din zona exista pe toata durata de executie a programului
– automatica: obiectele din zona exista pana la terminarea executiei blocului
– alocata D
durata statica P
Static Data Area a R
durata alocata t O
Heap a
G
a R
r A
Stack
durata automatica
e M
a

08.04.21 Lucian Cucu - The C Programming Language 11


West University of Timisoara
Faculty of Mathematics and Informatics Programming I

Identificatori
• nume de variabile
• nume de functii
• etichete
• tag-uri sau nume ale unor membri de structuri, uniuni sau enumerari
• Typedef- uri
Identificator: secventa de litere si cifre, care incepe cu o litera. Caracterul _
este asimilat literelor.

Nota: Acelasi identificator poate reprezenta entitati diferite in zone diferite ale unui program sursa.
E.g.

x, y, z, a1, b_1, result, counter


firstName, lastName

getValue, putValue

_errorExit

node, next

Tnode, Coord
08.04.21 Lucian Cucu - The C Programming Language 12
West University of Timisoara
Faculty of Mathematics and Informatics Programming I

Identificatori: domeniu lexical (domeniul unui identificator)

Domeniul unui identifcator: regiunea din textul sursa win care


identificatorul poate fi utilizat legal pentru a accesa obiectul pe care il
identifica.
File.c
Domeniul unui identificator poate fi de unul din tipurile: #include <stdio.h>
• domeniu functie #define N 100
• domeniu fisier
int count;
• domeniu block
void func(int n,int m);
• domeniu prototip de functie.
int main()
{
register int i;
label:
Domeniile de tip fisier, bloc si prototip de functie ...
incep din punctul in care apare declaratia }
si se termina la sfarsitul fisierului, blocului sau prototipului.
int val;
void func(int x, int y)
{int z = count*3;
static int state;
...
}

...

08.04.21 Lucian Cucu - The C Programming Language 13


West University of Timisoara
Faculty of Mathematics and Informatics Programming I

Identificatori: linkage

Linkage:
procesul prin care un identificator, declarat in domenii diferite, sau de mai multe ori
in acelasi domeniu, este legat de acelasi obiect (sau function).

Identificatorii au unul din urmatoarele tipuri de linkage:


• extern
• intern
• niciunul

08.04.21 Lucian Cucu - The C Programming Language 14


West University of Timisoara
Faculty of Mathematics and Informatics Programming I

Linkage
application files
program during execution

file1.c file2.c file3.c


v1: 2
1
3
0
(file3)v1: 2
1
0 Static
int v1; extern int v1; static int v1; v3: 0 data
void f1(); void f3(); void f4(); (f5)v4:
0
void f3()
D
void f2()
main() { {
{ v1=1;
int v2;
int v2,v3;
f4();
A
static int v4;
v1=1; v1=3; ...
... }
f1();
... T
f3();
... } void f4()
} {
int v5;
(f4)v5: A
(f2)v3:
int v3; v1=2; Stack
(f2)v2:
void f2(); ... ...
}
(f1)v2:
void f1()
...
{
(main)v2:
int v2;
v1=2; internal
... external linkage
f2();
}

08.04.21 Lucian Cucu - The C Programming Language 15

S-ar putea să vă placă și