Limbaje de programare
inginereşti
Tema 9
Notiuni de C++
Bjarne Stroustrup – The C++ Programming Language / Bjarne
Stroustrup. — 3rd. Ed. AT&T, ISBN 0201889544
Negrescu L - Limbajele C şi C++ pentru începători, volumul 1:
Limbajul C, Ed. Albastră, Cluj-Napoca, 2002
Florian Moraru – Programarea Calculatoarelor
Brian W. Kernighan, Dennis M. Ritchie - The C Programming
Language
Herbert Schildt, C++ Manual Complet, Ed.Teora, 1997, 1998 (traducere
de Mihai Dabuleanu)
http://www.cplusplus.com/info/
http://en.cppreference.com/w/
http://www.cprogramming.com/
http://www.youtube.com/watch?v=DPjoEKvf_x0
http://www.codeblocks.org/
gruparea structurilor de date cu operaţiile care prelucrează respectivele
date - obiect sau clasa.
1980, Bjarne Stroustrup: "C with Classes“
1983, C-with-classes a pătruns şi în lumea academică şi a instituţiilor de
cercetare.
Denumirea finală a acestui limbaj a fost C++.
Succes: a extins cel mai popular limbaj al momentului, C.
Programele scrise în C funcţionează şi în C++, şi ele pot fi transformate
în C++ cu eforturi minime.
Cea mai recentă etapă în evoluţia acestui limbaj - limbajul JAVA (SUN)
Observatie:
 Cunoaşterea în profunzime a limbajului C, este o premiză obloigatorie pentru
învăţarea limbajului C++
limbaj de nivel înalt, portabil, structurat, flexibil
permite atat programarea la nivel înalt cât şi la nivel scăzut.
produce programe eficiente (lungimea codului relativ scăzută, viteza de
execuţie mare)
set bogat de operatori
multiple facilităţi de reprezentare şi prelucrare a datelor
utilizare extensivă a apelurilor de funcţii şi a pointerilor
verificare mai scăzută a tipurilor -loose typing – spre deosebire de
PASCAL
limbaj procedural
 definirea structurilor de date
 definirea funcţiilor pentru lucrul cu aceste structuri
Este utilizat în multiple aplicaţii, în
care nu predomină caracterul numeric:
programe de sistem
proiectare asistată de calculator
grafică
prelucrare de imagini
aplicaţii de inteligenţă artificială
Editare
 File - New
Compilare : se rezolvă directivele preprocesor prin expandarea în codul
sursă şi apoi se transpune programul sursă în program obiect (.obj)
 Compile
Link-editare : legarea programului obiect obţinut la pasul anterior cu
bibliotecile de sistem şi transformarea lui într-un program executabil
 Compile
 Build
Lansare în execuţie
 Run
•Un program C este compus dintr-o ierarhie de funcţii, orice
program trebuind să conţină cel puţin funcţia main, prima care se
execută la lansarea programului C.
•Un program C are, în principiu, următoarea structura:
directive preprocesor
definiţii de tipuri
prototipuri de funcţii - tipul unei funcţii (tipul valorii
returnate) şi tipurile parametrilor transmişi funcţiei
definiţii de variabile globale
definiţii de funcţii
Observaţii
•execuţia programului începe cu prima linie din main()
•cuvintele cheie sunt scrise cu litere mici
•instrucţiunile se termină cu ';'
•şirurile de caractere sunt incluse între ghilimele duble
•limbajul C este case sensitive
•n poziţionează cursorul la începutul liniei următoare
•printf() poate fi utilizată pentru afişare pe ecran
•{…} delimitează începutul şi sfârşitul unui bloc program
•#include: directivă de preprocesare (includerea unor funcţii de
bibliotecă
•Toate programele în C, constau în una sau mai multe func ii. Singura
ț
func ie care trebuie sa fie prezentă este numită
ț main(), ea fiind prima
funcţie apelată când începe execuţia unui program
•main() – conţine în esenţă un plan a ce face programul, planul fiind
compus din functii de apelare
 Toate cuvintele cheie sunt scrise cu litera mica. Literele mari
difera de cele mici.
 Nu se pot folosi cuvintele-cheie în alt scop (de ex: nume de
functii, variabile)
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
 Se poate construi un program format si din instrucţiuni, dar limbajul C nu asigură nici
o metodă de efectuare a operaţiilor de intrare/ieşire
 Ca urmare, majoritatea programelor includ apeluri la diverse funcţii incluse in
biblioteca standard
C standard library
<assert.h> , <complex.h> , <ctype.h> ,<errno.h>, <fenv.h> , <float.h>, <inttypes.h>, <iso646.h>,
<limits.h> <locale.h> , <math.h> , <setjmp.h> , <signal.h> , <stdarg.h> , <stdbool.h> , <stddef.h>
, <stdint.h> <stdio.h> , <stdlib.h> , <string.h> , <tgmath.h> , <time.h> , <wchar.h> , <wctype.h>
 C++ standard Library, conţine 18 funcţii preluate din C, cu nume care se termina in .h, dar
utilizarea lor a fost reconsiderată.
ios, iostream, iomanip , fstream, sstream funcţii ale C++
Standard Template Library
vector, deque, list, map, set, stack, queue, bitset, algorithm, functional,
iterator
C++0x unordered_map , unordered_set
C Standard Library,
cassert, cctype ,cerrno, climits, clocale, cmath, csetjmp, csignal, cstdarg,
cstddef , cstdio, cstdint, cstdlib, cstring, ctime
 Expresiile in C sunt mult mai generale şi mai puternice
decat in alte limbaje de calcul. Expresiile sunt formate
din elementele atom ale limbajului C: Date şi operatori
 Datele pot fi reprezentate prin:
 Variabile
 Constante
Limbajul C acceptă 5 tipuri de date:
• caracter (char)
• întreg (int)
• în virgulă mobilă (float)
• în virgulă mobilă cu dublă precizie (double)
• Fără nici o valoare (void);
Limbajul C++ acceptă în plus încă 2 tipuri de de date bool şi
wchar_t
Modificarea tipurilor de bază:
Cu excepţia lui void, tipurile de date de bază pot fi
precedate de diverşi specificatori de conversie – utilizaţi
pentru a odifica tipul de date de bază pentru a se adapta
mai precis la situaţii cât mai diverse.
Lista specificatorilor de conversie : signed; unsigned; long;
short
Aplicare:
1. Se poate aplica signed; short şi unsigned - pentru
tipul (int)
2. Se poate aplica signed şi unsigned – pentru tipul
(char)
Toate combinaţiile posibile sunt prezentate ăn tabelul
urmator
 În C/C++ numele variabilelor, ale funcţiilor, ale
etichetelor şi ale altor diverse obiecte definite de către
utilizator sunt denumite identificatori.
 Aceşti identificatori pot să aibă una sau mai multe
caractere. Primul caracter trebuie să fie o literă sau o linie
de subliniere, iar următoarele pot fi litere, cifre sau linie
de subliniere (Nu se folosesc alte caractere !@#...)
 Exemple: numarator; test23; bilant_mare;
_ion_pozitiv
Incortect : salut!
 Un identificator nu poate fi identic cu un cuvânt cheie şi
nu trebuie să aibă acelaşi nume ca o funcţie din
biblioteca C sau C++
 Literele mari sunt tratate distinct faţă de literele mici în
indentificatori
 O variabilă este numele unei locaţii din memorie
utilizate pentru a păstra o valoare care poate fi modificată
de program. Înainte de a le utiliza, variabilele trebuiesc
declarate.
 Forma generală a unei declaraţii este:
tip listă_variabile:
Unde, tip, trebuie să fie un tip de dată valid, plus orice specificator
de conversie,
Iar, listă_variabile, poate consta dintr-unul sau mai multe nume de
identificatori, separaţi prin virgulă
Exemplu:
int i, j, k;
short int si;
unsigned bilant, profit, pierdere;
 Variabilele se declară, de obicei, în trei
locuri:
 în interiorul funcţiilor,
 în cadrul definiţiei parametrilor funcţiei
 În afara oricărei funcţii
Există mai multe tipuri de variabile:
 variabile locale
 Parametrii formali
 Variabile globale
Sunt acele variabile care se declară în interiorul unei funcţii. Se mai numesc
şi variabile automatice.
Aceste variabile sunt accesibile numai instrucţiunilor din interiorul blocului
de cod (funcţiei, instrucţiune). Un bloc de cod începe cu o acoladă deschisă şi
se termină cu o acoladă închisă.
Variabilele locale există doar atât cât se execută blocul de cod în care sunt
declarate. Aceasta înseamnă că o variabilă locală este creată la începerea
execuţiei blocului şi este distrusă la încheiere.
void func1 (void)
{
int x;
x=10;
}
void func1 (void)
{
int x;
x=-199;
}
void f (void)
{
int t;
scanf(“%d”, &t);
if(t==1){
char s[80]; /* variabila locala*/
printf(“Introduceti numele:);
gets (s)
}
}
Variabila locala s, este creată la intrarea în blocul de cod
if şi este distrusă la ieşirea din el.
Un avantaj de a declara o variabilă locală într-un bloc de
condiţionare este că pentru acea variabilă se va aloca
memorie doar dacă va fi necesar, deoarece variabilele
locale nu există până când nu se ajunge la blocul în
care sunt declarate.
Există o diferenţă importantă între modul de declarare a
variabilelor locale în C faţă de C++. În C, trebuie să se
declare TOATE, variabilele locale la începutul
blocului, înainte de orice instrucţiune a programului. În
C++ se pot defini variabile în orice punct al
programului
Dacă o funcţie urmează să folosească argumnete, ea
trebuie să declare variabilele pe care le ca valori ale
argumentelor. Aceste variabile sunt numite parametriii
formali ai funcţiei. Declararea lor are loc după numele
funcţiei şi este închisă între paranteze
Parametrii formali pot fi folosiţi în interiorul funcţiei ca
variabile locale obişnuite, dar vor fi distruse la ieşirea
din funcţie
/* Returnează 1 dacă c face parte din şirul s; daca nu , 0*/
nume_func (char s, char c)
{
while (s)
if ((s=c) return 1;
else s++;
return 0;
}
Spre deosebire de variabilele locale, variabilele globale
sunt cunoscute în întreg programul şi pot fi utilizate de
către orice zonă a codului. Ele îşi vor păstra valoarea
pe parcursul întregii execuţiii a programului.
Variabilele globale se crează prin declarare în afara
oricărei funcţii. Orice expresie are acces la ele,
indiferent de tipul blocului de cod în care se află
expresia.
Declaraţia unei variabile globale se poate face oriunde
înainte de prima ei utilizare, dar nu într-o funcţie. Este
bine însă, să se declare variabilele globale la începutul
programului
Dacă o variabilă locală şi una globală au acelaşi nume,
toate referirile la numele variabilei din interiorul
blocului în care a fost declarată variabilă locală, sunt
pentru acea variabilă şi nu au efect asupra variabilei
globale
Stocarea variabilelor globale este făcută de compilator
într-o anumită regiune de memorie alocată acestui
scop. Variabilele globale sunt utile atunci când mai
multe funcţii ale aceluiaşi program folosesc aceleaşi
date.
Este bine însă să se evite utilizarea variabilelor globale
când nu este necesar. Ele ocupă spaţiu în memorie tot
timpul cât este executat programul, nu doar atunci
cand sunt necesare.
Limbajul C admite patru specificatori de clase de stocare:
- extern;
- static;
- register;
- auto.
Aceşti specificatori, spun compilatorului cum să stocheze
variabilele care îi urmează.
Specificatorul de stocare precede restul declaraţiei de
variabile
Forma sa generală este:
Specificator_de_stocare tip nume_variabilă
C şi C++ permit secţiunilor separate ale unui program
mare să fie compilate independent şi să li se editeze
legăturile împreună, fiind necesar un mod de a
comunica tuturor fişierelor, variabilele globale necesare
programului. Deşi C permite declararea variabilelor
globale de mai multe ori în C++ acest lucru se poate
face doar o dată.
Pentru a informa toate fişierele de program de toate
variabilele globale utilizate, este necesar să se declare
toate variabilele globale într-un singur fişier şi să se
folosească declaraţiile extern în celelalte.
În fişierul 2, lista de variabile globale a fost copiată din fişierul 1, iar
declaraţiilor le-a fost adaugat specificatorul extern. Aceasta
spune compilatorului că tipurile şi numele de variabilă care îi
urmează au fost declarate în altă parte. Se oferă compilatorului
informaţii despre numele şi tipurile de variabile globale fără să se
creeze de fapt un nou loc de stocare a lor
Fişier 1
int x,z ;
char ch:
main(void)
{
.
. .
}
func1()
{
x=123;
}
Fisier 2
extern int x,y;
extern char ch;
func22(void)
{
x= y/10;
}
func23()
{
y=10;
}
Variabilele de tip static sunt variabile permanente în interiorul funcţiei sau fişierului în
care se găsesc.
Sunt utile atunci când se scriu funcţii generalizate şi funcţii de bibliotecă pe care le pot
utiliza alte proigrame
static are efecte diferite asupra variabilelor locale sau asupra variabilelor globale.
1. Variabile locale statice
La aplicarea specificatorului static unei variabile locale, compilatorul crează pentru ea
un loc de stocare permanent, similar celui rezervat unei variabile globale. Diferenţa
esenţială între o variabilă locală statică şi o variabilă globalăeste că cea locală
statică rămâne cunoscută doar blocului în care a fost declarată.
O variabilă locală statică, îşi păstrează valoarea între apelările funcţiei.
O variabilă locală statică continua să existe între apelările funcţiei şi nu apare şi
dispare aşa cum o fac variabilele statice obişnuite.
Serii (void)
{
static int serii_num;
serii_num=serii_num+23
return serii_num
}
1. Variabile globale statice
La aplicarea specificatorului static unei variabile globale,
compilatorul crează o variabilă globală care este
cunoscută doar în fişierul în care a fost declarată.
Aceasta înseamnă că deşi variabila este globală,
rutinele din alte fişiere nu au acces la ea şi nu îi pot
modifica direct conţinutul.
Numele variabilelor globale de tip static sunt cunoscute
doar fişierului în care se găsesc.
Specificatorul de stocare register se aplică la orice tip de variabilă, dar este mai
întâlnit la variabilele int şi char.
Semnificaţia utilizării lui este aceea că obiectul declarat astfel va fi utilizat din plin,
accesul la acesta făcându-se cât maui repede posibil.
Operaţiile asupra unei variabile specificate register, sunt executate mai repede decât
asupra uneia obişnuite.
Se poate aplica specificatorul register doar variabilelor locale şi parametrilor
formali ai unei funcţii.
Nu sunt permise variabile globale de tip register
Ex:
putere_int(register int m, register int e)
{
register int temp;
temp=1;
temp=m*e
}
Limbaje de programare ingineresti - C++ notiuni

Limbaje de programare ingineresti - C++ notiuni

  • 1.
  • 2.
    Bjarne Stroustrup –The C++ Programming Language / Bjarne Stroustrup. — 3rd. Ed. AT&T, ISBN 0201889544 Negrescu L - Limbajele C şi C++ pentru începători, volumul 1: Limbajul C, Ed. Albastră, Cluj-Napoca, 2002 Florian Moraru – Programarea Calculatoarelor Brian W. Kernighan, Dennis M. Ritchie - The C Programming Language Herbert Schildt, C++ Manual Complet, Ed.Teora, 1997, 1998 (traducere de Mihai Dabuleanu) http://www.cplusplus.com/info/ http://en.cppreference.com/w/ http://www.cprogramming.com/ http://www.youtube.com/watch?v=DPjoEKvf_x0 http://www.codeblocks.org/
  • 3.
    gruparea structurilor dedate cu operaţiile care prelucrează respectivele date - obiect sau clasa. 1980, Bjarne Stroustrup: "C with Classes“ 1983, C-with-classes a pătruns şi în lumea academică şi a instituţiilor de cercetare. Denumirea finală a acestui limbaj a fost C++. Succes: a extins cel mai popular limbaj al momentului, C. Programele scrise în C funcţionează şi în C++, şi ele pot fi transformate în C++ cu eforturi minime. Cea mai recentă etapă în evoluţia acestui limbaj - limbajul JAVA (SUN) Observatie:  Cunoaşterea în profunzime a limbajului C, este o premiză obloigatorie pentru învăţarea limbajului C++
  • 4.
    limbaj de nivelînalt, portabil, structurat, flexibil permite atat programarea la nivel înalt cât şi la nivel scăzut. produce programe eficiente (lungimea codului relativ scăzută, viteza de execuţie mare) set bogat de operatori multiple facilităţi de reprezentare şi prelucrare a datelor utilizare extensivă a apelurilor de funcţii şi a pointerilor verificare mai scăzută a tipurilor -loose typing – spre deosebire de PASCAL limbaj procedural  definirea structurilor de date  definirea funcţiilor pentru lucrul cu aceste structuri
  • 5.
    Este utilizat înmultiple aplicaţii, în care nu predomină caracterul numeric: programe de sistem proiectare asistată de calculator grafică prelucrare de imagini aplicaţii de inteligenţă artificială
  • 6.
    Editare  File -New Compilare : se rezolvă directivele preprocesor prin expandarea în codul sursă şi apoi se transpune programul sursă în program obiect (.obj)  Compile Link-editare : legarea programului obiect obţinut la pasul anterior cu bibliotecile de sistem şi transformarea lui într-un program executabil  Compile  Build Lansare în execuţie  Run
  • 7.
    •Un program Ceste compus dintr-o ierarhie de funcţii, orice program trebuind să conţină cel puţin funcţia main, prima care se execută la lansarea programului C. •Un program C are, în principiu, următoarea structura: directive preprocesor definiţii de tipuri prototipuri de funcţii - tipul unei funcţii (tipul valorii returnate) şi tipurile parametrilor transmişi funcţiei definiţii de variabile globale definiţii de funcţii
  • 8.
    Observaţii •execuţia programului începecu prima linie din main() •cuvintele cheie sunt scrise cu litere mici •instrucţiunile se termină cu ';' •şirurile de caractere sunt incluse între ghilimele duble •limbajul C este case sensitive •n poziţionează cursorul la începutul liniei următoare •printf() poate fi utilizată pentru afişare pe ecran •{…} delimitează începutul şi sfârşitul unui bloc program •#include: directivă de preprocesare (includerea unor funcţii de bibliotecă
  • 9.
    •Toate programele înC, constau în una sau mai multe func ii. Singura ț func ie care trebuie sa fie prezentă este numită ț main(), ea fiind prima funcţie apelată când începe execuţia unui program •main() – conţine în esenţă un plan a ce face programul, planul fiind compus din functii de apelare
  • 10.
     Toate cuvintelecheie sunt scrise cu litera mica. Literele mari difera de cele mici.  Nu se pot folosi cuvintele-cheie în alt scop (de ex: nume de functii, variabile) auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while
  • 11.
     Se poateconstrui un program format si din instrucţiuni, dar limbajul C nu asigură nici o metodă de efectuare a operaţiilor de intrare/ieşire  Ca urmare, majoritatea programelor includ apeluri la diverse funcţii incluse in biblioteca standard C standard library <assert.h> , <complex.h> , <ctype.h> ,<errno.h>, <fenv.h> , <float.h>, <inttypes.h>, <iso646.h>, <limits.h> <locale.h> , <math.h> , <setjmp.h> , <signal.h> , <stdarg.h> , <stdbool.h> , <stddef.h> , <stdint.h> <stdio.h> , <stdlib.h> , <string.h> , <tgmath.h> , <time.h> , <wchar.h> , <wctype.h>  C++ standard Library, conţine 18 funcţii preluate din C, cu nume care se termina in .h, dar utilizarea lor a fost reconsiderată. ios, iostream, iomanip , fstream, sstream funcţii ale C++ Standard Template Library vector, deque, list, map, set, stack, queue, bitset, algorithm, functional, iterator C++0x unordered_map , unordered_set C Standard Library, cassert, cctype ,cerrno, climits, clocale, cmath, csetjmp, csignal, cstdarg, cstddef , cstdio, cstdint, cstdlib, cstring, ctime
  • 12.
     Expresiile inC sunt mult mai generale şi mai puternice decat in alte limbaje de calcul. Expresiile sunt formate din elementele atom ale limbajului C: Date şi operatori  Datele pot fi reprezentate prin:  Variabile  Constante Limbajul C acceptă 5 tipuri de date: • caracter (char) • întreg (int) • în virgulă mobilă (float) • în virgulă mobilă cu dublă precizie (double) • Fără nici o valoare (void); Limbajul C++ acceptă în plus încă 2 tipuri de de date bool şi wchar_t
  • 13.
    Modificarea tipurilor debază: Cu excepţia lui void, tipurile de date de bază pot fi precedate de diverşi specificatori de conversie – utilizaţi pentru a odifica tipul de date de bază pentru a se adapta mai precis la situaţii cât mai diverse. Lista specificatorilor de conversie : signed; unsigned; long; short Aplicare: 1. Se poate aplica signed; short şi unsigned - pentru tipul (int) 2. Se poate aplica signed şi unsigned – pentru tipul (char) Toate combinaţiile posibile sunt prezentate ăn tabelul urmator
  • 15.
     În C/C++numele variabilelor, ale funcţiilor, ale etichetelor şi ale altor diverse obiecte definite de către utilizator sunt denumite identificatori.  Aceşti identificatori pot să aibă una sau mai multe caractere. Primul caracter trebuie să fie o literă sau o linie de subliniere, iar următoarele pot fi litere, cifre sau linie de subliniere (Nu se folosesc alte caractere !@#...)  Exemple: numarator; test23; bilant_mare; _ion_pozitiv Incortect : salut!  Un identificator nu poate fi identic cu un cuvânt cheie şi nu trebuie să aibă acelaşi nume ca o funcţie din biblioteca C sau C++  Literele mari sunt tratate distinct faţă de literele mici în indentificatori
  • 16.
     O variabilăeste numele unei locaţii din memorie utilizate pentru a păstra o valoare care poate fi modificată de program. Înainte de a le utiliza, variabilele trebuiesc declarate.  Forma generală a unei declaraţii este: tip listă_variabile: Unde, tip, trebuie să fie un tip de dată valid, plus orice specificator de conversie, Iar, listă_variabile, poate consta dintr-unul sau mai multe nume de identificatori, separaţi prin virgulă Exemplu: int i, j, k; short int si; unsigned bilant, profit, pierdere;
  • 17.
     Variabilele sedeclară, de obicei, în trei locuri:  în interiorul funcţiilor,  în cadrul definiţiei parametrilor funcţiei  În afara oricărei funcţii Există mai multe tipuri de variabile:  variabile locale  Parametrii formali  Variabile globale
  • 18.
    Sunt acele variabilecare se declară în interiorul unei funcţii. Se mai numesc şi variabile automatice. Aceste variabile sunt accesibile numai instrucţiunilor din interiorul blocului de cod (funcţiei, instrucţiune). Un bloc de cod începe cu o acoladă deschisă şi se termină cu o acoladă închisă. Variabilele locale există doar atât cât se execută blocul de cod în care sunt declarate. Aceasta înseamnă că o variabilă locală este creată la începerea execuţiei blocului şi este distrusă la încheiere. void func1 (void) { int x; x=10; } void func1 (void) { int x; x=-199; } void f (void) { int t; scanf(“%d”, &t); if(t==1){ char s[80]; /* variabila locala*/ printf(“Introduceti numele:); gets (s) } }
  • 19.
    Variabila locala s,este creată la intrarea în blocul de cod if şi este distrusă la ieşirea din el. Un avantaj de a declara o variabilă locală într-un bloc de condiţionare este că pentru acea variabilă se va aloca memorie doar dacă va fi necesar, deoarece variabilele locale nu există până când nu se ajunge la blocul în care sunt declarate. Există o diferenţă importantă între modul de declarare a variabilelor locale în C faţă de C++. În C, trebuie să se declare TOATE, variabilele locale la începutul blocului, înainte de orice instrucţiune a programului. În C++ se pot defini variabile în orice punct al programului
  • 20.
    Dacă o funcţieurmează să folosească argumnete, ea trebuie să declare variabilele pe care le ca valori ale argumentelor. Aceste variabile sunt numite parametriii formali ai funcţiei. Declararea lor are loc după numele funcţiei şi este închisă între paranteze Parametrii formali pot fi folosiţi în interiorul funcţiei ca variabile locale obişnuite, dar vor fi distruse la ieşirea din funcţie /* Returnează 1 dacă c face parte din şirul s; daca nu , 0*/ nume_func (char s, char c) { while (s) if ((s=c) return 1; else s++; return 0; }
  • 21.
    Spre deosebire devariabilele locale, variabilele globale sunt cunoscute în întreg programul şi pot fi utilizate de către orice zonă a codului. Ele îşi vor păstra valoarea pe parcursul întregii execuţiii a programului. Variabilele globale se crează prin declarare în afara oricărei funcţii. Orice expresie are acces la ele, indiferent de tipul blocului de cod în care se află expresia. Declaraţia unei variabile globale se poate face oriunde înainte de prima ei utilizare, dar nu într-o funcţie. Este bine însă, să se declare variabilele globale la începutul programului
  • 22.
    Dacă o variabilălocală şi una globală au acelaşi nume, toate referirile la numele variabilei din interiorul blocului în care a fost declarată variabilă locală, sunt pentru acea variabilă şi nu au efect asupra variabilei globale Stocarea variabilelor globale este făcută de compilator într-o anumită regiune de memorie alocată acestui scop. Variabilele globale sunt utile atunci când mai multe funcţii ale aceluiaşi program folosesc aceleaşi date. Este bine însă să se evite utilizarea variabilelor globale când nu este necesar. Ele ocupă spaţiu în memorie tot timpul cât este executat programul, nu doar atunci cand sunt necesare.
  • 23.
    Limbajul C admitepatru specificatori de clase de stocare: - extern; - static; - register; - auto. Aceşti specificatori, spun compilatorului cum să stocheze variabilele care îi urmează. Specificatorul de stocare precede restul declaraţiei de variabile Forma sa generală este: Specificator_de_stocare tip nume_variabilă
  • 24.
    C şi C++permit secţiunilor separate ale unui program mare să fie compilate independent şi să li se editeze legăturile împreună, fiind necesar un mod de a comunica tuturor fişierelor, variabilele globale necesare programului. Deşi C permite declararea variabilelor globale de mai multe ori în C++ acest lucru se poate face doar o dată. Pentru a informa toate fişierele de program de toate variabilele globale utilizate, este necesar să se declare toate variabilele globale într-un singur fişier şi să se folosească declaraţiile extern în celelalte.
  • 25.
    În fişierul 2,lista de variabile globale a fost copiată din fişierul 1, iar declaraţiilor le-a fost adaugat specificatorul extern. Aceasta spune compilatorului că tipurile şi numele de variabilă care îi urmează au fost declarate în altă parte. Se oferă compilatorului informaţii despre numele şi tipurile de variabile globale fără să se creeze de fapt un nou loc de stocare a lor Fişier 1 int x,z ; char ch: main(void) { . . . } func1() { x=123; } Fisier 2 extern int x,y; extern char ch; func22(void) { x= y/10; } func23() { y=10; }
  • 26.
    Variabilele de tipstatic sunt variabile permanente în interiorul funcţiei sau fişierului în care se găsesc. Sunt utile atunci când se scriu funcţii generalizate şi funcţii de bibliotecă pe care le pot utiliza alte proigrame static are efecte diferite asupra variabilelor locale sau asupra variabilelor globale. 1. Variabile locale statice La aplicarea specificatorului static unei variabile locale, compilatorul crează pentru ea un loc de stocare permanent, similar celui rezervat unei variabile globale. Diferenţa esenţială între o variabilă locală statică şi o variabilă globalăeste că cea locală statică rămâne cunoscută doar blocului în care a fost declarată. O variabilă locală statică, îşi păstrează valoarea între apelările funcţiei. O variabilă locală statică continua să existe între apelările funcţiei şi nu apare şi dispare aşa cum o fac variabilele statice obişnuite. Serii (void) { static int serii_num; serii_num=serii_num+23 return serii_num }
  • 27.
    1. Variabile globalestatice La aplicarea specificatorului static unei variabile globale, compilatorul crează o variabilă globală care este cunoscută doar în fişierul în care a fost declarată. Aceasta înseamnă că deşi variabila este globală, rutinele din alte fişiere nu au acces la ea şi nu îi pot modifica direct conţinutul. Numele variabilelor globale de tip static sunt cunoscute doar fişierului în care se găsesc.
  • 28.
    Specificatorul de stocareregister se aplică la orice tip de variabilă, dar este mai întâlnit la variabilele int şi char. Semnificaţia utilizării lui este aceea că obiectul declarat astfel va fi utilizat din plin, accesul la acesta făcându-se cât maui repede posibil. Operaţiile asupra unei variabile specificate register, sunt executate mai repede decât asupra uneia obişnuite. Se poate aplica specificatorul register doar variabilelor locale şi parametrilor formali ai unei funcţii. Nu sunt permise variabile globale de tip register Ex: putere_int(register int m, register int e) { register int temp; temp=1; temp=m*e }