Sunteți pe pagina 1din 13

2.

Sintaxa i semantica C++


n acest curs vom vedea care sunt principalele reguli i simboluri care fac din C++ un limbaj de programare. Vom vedea, de asemenea, ce pai trebuie parcuri pentru a scrie un program simplu i a-l face s ruleze pe un calculator.

2.1

Structura unui program C++

Subprogramele permit scrierea separat a unor pri din program care, apoi, se asambleaz n programul final. n C++, subprogramele se numesc funcii, iar un program C++ este o colecie de clase i funcii. Fiecare program C++ trebuie s conin o funcie care se numete main. Aceasta poate fi privit ca o funcia main funcie master pentru celelalte funcii din program. Cnd main este programat s execute subprogramul corespunztor functie Patrat spunem c main apeleaz sau invoc funcia Patrat. funcia Patrat Dup ce Patrat ncheie execuia tuturor instruciunilor, ea transmite (sau ntoarce) controlul napoi ctre funcia main care i continu execuia. Urmtorul exemplu este un program C++ care funcia Cub este alctuit din 3 funcii: main, Patrat i Cub. Detaliile nu sunt importante. #include <iostream> using namespace std; int Patrat(int); int Cub(int); int main() { cout << "Patratul lui 27 este " << Patrat(27) << endl; cout << "si cubul lui 27 este " << Cub(27) << endl; return 0; } int Patrat(int n) { return n*n; } int Cub(int n) { return n*n*n; }

Programarea calculatoarelor i limbaje de programare I

n fiecare dintre funcii, acoladele { i } marcheaz nceputul i sfritul instruciunilor care trebuie executate. Ceea ce se gsete ntre acolade se numete corpul funciei sau bloc de instruciuni. Execuia unui program C++ ncepe ntotdeauna cu prima instruciune din funcia main. n programul de mai sus, aceasta este cout << "Patratul lui 27 este " << Patrat(27) << endl; Aceasta este o instruciune care produce afiarea unor informaii pe ecranul calculatorului. Detalii vom afla puin mai trziu, tot n acest capitol. Pe scurt, instruciunea tiprete dou elemente. Primul este mesajul Patratul lui 27 este Cel de-al doilea este o valoare obinut prin apelul (invocarea) funciei Patrat cu valoarea 27. Aceast funcie realizeaz ridicarea la ptrat i trimite rezultatul, 729, napoi ctre apelant (funcia invocatoare), adic funcia main. Acum main continu execuia tiprind valoarea 729 dup care trece la instruciunea urmtoare. Similar, a doua instruciune din funcia main tiprete mesajul si cubul lui 27 este dup care invoc funcia Cub. Aceasta ntoarce rezultatul 19683, care este tiprit. Rezultatul final va fi Patratul lui 27 este 729 si cubul lui 27 este 19683 Atat Patrat ct i Cub sunt exemple de funcii care returneaz o valoare. O astfel de funcie transmite o singur valoare ctre funcia apelant. Cuvntul int aflat la nceputul primei linii a funciei Patrat arat c funcia ntoarce o valoare ntreag (un numr ntreg). S revenim la funcia main. Prima ei linie este int main() Cuvntul int indic faptul c main este o funcie care ntoarce o singur valoare, un numr ntreg. Dup tiprirea ptratului i a cubului lui 27, main execut instruciunea return 0; pentru a ntoarce valoarea 0 ctre apelant. Dar cine apeleaz funcia main? Rspunsul este: sistemul de operare. Acesta ateapt o valoare (exit status) de la main dup ce aceasta i ncheie execuia. Prin convenie, valoarea returnat 0 nseam c totul a decurs OK. O alt valoare (1, 2 etc.) nseamn c s-a petrecut ceva nedorit.

2.2

Sintax i semantic

Vom ncepe acum s intrm n detalii legate de programarea n C++. Un limbaj de programare este un set de reguli, simboluri i cuvinte speciale folosite pentru a scrie un program. Regulile sunt valabile att pentru sintax (gramatic), ct i pentru semantic (semnificaie). Sintaxa este un set de reguli care definesc exact ce conbinaii de litere, numere i simboluri pot fi folosite ntr-un limbaj de programare. Nu se accept ambiguiti. Vom vedea c nclcarea oricrei reguli a limbajului, de exemplu scrierea incorect a unui cuvnt sau uitarea unei virgule pot genera erori de sintax (syntax errors) i codul surs nu poate fi compilat pn la corectarea lor. Semantica este un set de reguli care determin semnificaia instruciunilor scrise ntr-un limbaj de programare.

Programarea calculatoarelor i limbaje de programare I

abloane sintactice
n acest curs vom folosi abloane ca i exemple generice de construcii sintactice n C++. Cel mai frecvent vom folosi abloane asemntoare celui pentru funcia main: int main() Funcia main { instruciune } Acest ablon arat c funcia main ncepe cu cuvntul int urmat de cuvntul main i o pereche de paranteze rotunde. Prima linie a oricrei funcii numete heading. Acest heading este urmat de o acolad care marcheaz nceputul unei liste de instruciuni corpul funciei. n final, acolada nchis indic sfritul funciei. Cele 3 puncte indic faptul c instruciunea poate fi urmat de 0 sau mai multe alte instruciuni.

Denumirea elementelor programului: identificatorii


n C++ identificatorii sunt nume asociate funciilor, claselor sau datelor i sunt folosite pentru a referi funcii, clase sau date. Identificatorii sunt alctuii din litere (A-Z, a-z), cifre (0-9) i caracterul underscore (_), dar trebuie s nceap cu o liter sau cu underscore. Exemplu Identificatori coreci: J9, GetData, sum_of_squares Identificatori incoreci: 40Hours - nu poate ncepe cu o cifr Get Data - nu poate conine spaiu box-22 - nu poate conine pentru c este simbol matematic int - cuvntul int este predefinit n C++ Cuvntul int este cuvnt rezervat. Acestea sunt cuvinte care au o utilizare special n C++ i nu pot fi utilizate drept identificatori definii de programator. Este foarte util ca identificatorii s fie sugestivi i uor de citit. Exemplu PRINTTOPPORTION fa de PrintTopPortion

2.3

Date i tipuri de date

De unde ia programul datele de care are nevoie pentru a lucra? Datele sunt pstrate n memoria calculatorului. Fiecare locaie are o adres unic pe care o referim atunci cnd dorim s stocm sau s aducem date. Adresa fiecrei locaii de memorie este un numr binar. n C++ folosim identificatori pentru a denumi locaiile de memorie. Acesta este unul dintre avantajele limbajelor de programare de nivel nalt: ne elibereaz de grija de a gestiona locaiile de memorie la care sunt pstrate datele i instruciunile. n C++ fiecare dat trebuie s fie de un anumit tip. Tipul de dat determin modul n care datele sunt reprezentate n interiorul calculatorului i operaiile care se pot realiza asupra lor. C++ definete un set de tipuri standard de date, pe care le vom descrie mai jos. De asemenea, programatorul i poate defini propriile tipuri de date. Tipurile standard sunt organizate astfel: Tipuri simple Tipuri integrale char

Programarea calculatoarelor i limbaje de programare I

short int long enum Tipuri reale float double long double Tipuri adres pointer referin Tipuri structurate tablou (array) struct union class

Tipurile integrale
Se numesc aa pentru c se refer la valori ntregi. Despre tipul enum nu discutm n acest capitol. ntregii sunt secvene de una sau mai multe cifre. Nu se admite virgula. n multe cazuri, semnul preced un ntreg. Exemplu 22 16 1 -378 -912 Atunci cnd cuvntul rezervat unsigned preced un tip de dat, valoarea ntreag poate fi doar pozitiv sau 0. Exemplu unsigned int Tipurile de dat char, short, int i long reprezint ntregi de diferite dimensiuni cu mai muli sau mai puini bii. celula de memorie char celula de memorie short celula de memorie int celula de memorie long n general, cu ct sunt mai muli bii n celula de memorie, cu att mai mari sunt valorile ntregi care pot fi memorate acolo. Dimensiunile acestor celule de memorie sunt dependente de main. Pe unele calculatoare, o dat de tip int se poate gsi n intervalul -32768 ... +32767, iar pe altele ntre -2147483648 ... +2147483647. Cnd programul ncearc s calculeze o valoare mai mare dect valoarea maxim, rezultatul este un integer overflow. Un ntreg care ncepe cu cifra 0 este considerat ca fiind scris n baza 8. Exemplu 015 este 158 Tipul char. Acesta este cel mai mic tip de dat care poate fi folosit pentru a reprezenta valori ntregi. Se obinuiete folosirea acestui tip de dat atunci cnd se dorete o economie de memorie i se folosesc ntregi mici. ns tipul char, n mod tipic, se folosete pentru a descrie date care constau dintr-un caracter alfanumeric (liter, cifr sau simbol special). Exemplu 'A' 'a' '8' '2' '+' '$' ' ' 4

Programarea calculatoarelor i limbaje de programare I

Fiecare caracter este cuprins ntre apostroafe, astfel nct C++ face diferena dintre data de tip caracter '8' i valoarea ntreag 8, pentru c cele dou sunt pstrate n mod diferit n interiorul calculatorului. Nu sunt obinuite operaii de adunare a caracterului 'A' cu caracterul 'B', de scdere a caracterului '3' din caracterul '8', ns aceste caractere se pot compara. Caracterul 'A' este ntotdeauna mai mic dect 'B', 'B' mai mic dect 'C' etc. Fiecare set de caractere definete o astfel de secven.

Tipurile reale (virgul mobil)


Aceste tipuri de date se utilizeaz pentru a reprezenta numere reale. Numerele reprezentate n virgul mobil au parte ntreag i o parte fracionar, separate de un punct. Exemplu 18.0 127.54 .8 0.57 Numrul 0.57 nu este octal. Aceast regul este valabil doar pentru numere ntregi. Aa cum tipurile integrale din C++ au diferite dimensiuni, la fel se ntmpl i cu tipurile reale. n ordine cresctoare, acestea sunt float, double i long double. Valorile reprezentate n virgul mobil pot avea un exponent, ca n notaia tiinific (un numr este scris ca o valoare nmulit cu 10 ridicat la putere). n loc de 3.504x1012, n C++ scriem 3.504e12. e nseamn exponent al bazei 10. Numrul dinaintea lui e nu trebuie s includ n mod obligatoriu punctul zecimal. Dintre tipurile de dat reale, cel mai folosit este float care, adeseori, este suficient. Valoarea maxim oferit de tipul float este, n general, n jur de 3.4e+38. Calculatoarele nu pot reprezenta ntotdeauna numerele n virgul mobil. Datorit faptului c memorarea se face n form binar, multe valori reale pot fi doar aproximate n acest sistem. De aceea, nu trebuie s ne mire c, pe unele calculatoare, de exemplu 4.8 va fi afiat 4.7999998, fr a fi vorba de o eroare de programare.

2.4

Declaraiile

Identificatorii pot fi utilizai pentru a denumi constante sau variabile, adic locaii de memorie al cror coninut se permite s fie modificat. Cum spunem calculatorului ce reprezint un identificator? Declaraia este o instruciune care asociaz un nume (un identificator) cu o dat, o funcie sau un tip de dat, astfel nct programatorul poate s se refere la acest element prin nume. Este la fel cum o definiie dintr-un dicionar asociaz un nume unei descrieri a elementului la care ne referim prin acest nume. De exemplu, declaraia int empNum; Anun c empNum este numele unei variabile al crei coninut este de tip int. Cnd declarm o variabil, compilatorul alege o locaie de memorie i o asociaz cu identificatorul pstrnd aceast asociere la dispoziia programului. Orice identificator dintr-un program trebuie s fie unic n domeniul ei. n C++ un identificator trebuie s fie declarat nainte de a fi folosit. Dac declarm un identificator ca fiind o constant i ncercm mai trziu s i modificm valoarea, compilatorul detecteaz aceast inconsisten i semnaleaz eroare. 5

Programarea calculatoarelor i limbaje de programare I

Constantele i variabilele poart numele generic de date.

2.5

Variabilele

Variabila este o locaie de memorie referit printr-un identificator i care pstreaz valoarea unei date ce poate fi modificat. Numele simbolic asociat variabilei se numete identificatorul variabilei sau numele variabilei. Identificatorul variabilei empNum (locaia de memorie 0x22ff74) Variabila

10533
Valoarea

(int)

Tipul de dat

Declararea variabilei nseamn specificarea att a numelui ei ct i a tipului de dat. O declaraie se termina ntotdeauna cu ; Exemplu int empNum; Se pot declara mai multe variabile de acelai tip ntr-o singur declaraie. Exemplu int studentCount, maxScore, sumOfScores; Aceasta declaie este identic cu: int studentCount; int maxScore; int sumOfScores; Declararea fiecrei variabile ntr-o instruciune separat ne permite s adugm comentarii pentru nelegerea declaraiilor la o parcurgere ulterioar a programului. Exemplu float payRate; //Employees pay rate Comentariile sunt precedate de // i sunt ignorate de compilator.

2.6

Constantele

Toate numerele, ntregi sau reale, sunt constante. La fel, caracterele (cuprinse ntre ' ') i secvenele de caractere sau string-urile, irurile (cuprinse ntre ). Exemplu 16 32.3 'A' Boys n C++ ca i n matematic, o constant este un element al crui valoare nu se schimb niciodat. Folosim constante ca pri ale unor expresii aritmetice. Putem scrie o instruciune care adun constantele 5 i 6 i plaseaz rezultatul n variabila numit sum. Numim valoare literal (sau literal) orice valoare constant din program. O alternativ la literale sunt constantele simbolice (sau constante cu nume). Acestea sunt locaii de memorie referite printr-un identificator care pstreaz date ce pot fi modificate. De exemplu, n loc s folosim literalul 3.14159 folosim constanta simbolic PI. Acest lucru face programul mai uor de citit i de modificat.

Programarea calculatoarelor i limbaje de programare I

Declararea constantelor n C++ ncepe cu cuvntul rezervat const, iar semnul = se aeaz ntre identificator i valoarea literal. Exemplu const char BLANK = ' '; const float PI = 3.14159; const int MAX = 20; De regul, constantele simbolice se scriu cu litere mari pentru a le distinge mai uor de variabile la citirea programului.

2.7
Asignarea

Aciuni: instruciuni executabile

Valoarea unei variabile poate fi schimbat prin asignare. Exemplu quizScore = 10; Valoarea 10 este asignat variabilei quizScore, adic valoarea 10 va fi stocat n locaia de memorie numit quizScore. Semantica operatorului de asignare = este pstreaz, stocheaz. Orice valoare anterioar stocat la acea locaie de memorie se pierde, fiind nlocuit de noua valoare. ntr-o instruciune de asignare, doar o variabil poate aprea n stnga operaiei. Asignarea nu este ca o ecuaie matematic ( x+y=z+4 ). Avnd declaraiile: int num; int alpha; float rate; char ch; putem face urmtoarele asignri: alpha = 2856; rate = 0.36; ch = 'B'; num = alpha; Asignarea ch = Hello; nu este corect pentru c ch este o variabil de tip char iar Hello este un string. Pentru o mai mare lizibilitate a programelor pe care le scriem, vom respecta urmtoarele reguli: - Folosim iniiala mic pentru numele de variabile Exemplu lengthsInYards hours - Folosim iniiala mare pentru numele de funcii sau clase Exemplu Cub(27) MyDataType - Folosim litere mari pentru constante simbolice Exemplu UPPER_LIMIT PI Expresia din dreapta operatorului de asignare este evaluat i valoarea ei este stocat n variabila aflat n stnga operaturului. O expresie este alctuit din constante, variabile i operatori. Exemplu alpha+2 rate-6.0 alpha*num 7

Programarea calculatoarelor i limbaje de programare I

Operatorii admii ntr-o expresie depind de tipurile de date ale constantelor i ale variabilelor din expresie. Operatorii matematici sunt: + Plus unar - Minus unar + Adunare - Scdere * Multiplicare / mprire real (rezultat real) sau mprire ntreag (rezultat ntreg) % Modulo (restul mpririi) Operatorii unari folosesc un singur operand. Cei binari folosesc doi operanzi. Exemplu -54 +259.65 -rate O constant fr semn este pozitiv. mprirea ntreag este ctul obinut la mprirea a dou numere ntregi. Operaia modulo reprezint restul acestei mpriri i se aplic doar numerelor ntregi. Exemplu 6/2 3 7/2 3 6%2 0 7%2 1 mprirea n virgul mobil (real) genereaz rezultat real, iar operanzii trebuie s fie reali. Exemplu 7.0/2.0 3.5 Exemplu Expresie Valoare Expresie Valoare 3+6 9 7.0/0.0 eroare 3.4+6.9 10.3 7/0 eroare 2*3 6 7%0 eroare 8.0/-2.0 -4.0 8/9 0 5%2.3 Eroare Pentru c n expresii pot aprea i variabile, urmtoarele asignri sunt valide: alpha = num + 6; num = alpha * 2; num = num + alpha; num = 6 % alpha; n cazul instruciunii num = num + alpha; valorile lui num i alpha sunt adunate, iar rezultatul este pstrat n num, nlocuind vechea valoare pstrat aici. Acest exemplu arat diferena dintre egaliatea matematic i asignare. n matematic num = num + alpha este adevrat doar cnd alpha este 0. Instruciunea de asignare num = num + alpha; este valid pentru orice alpha.

Programarea calculatoarelor i limbaje de programare I

Incrementarea i decrementarea
Pe lng operatorii aritmetici, C++ ofer operatorii de incrementare i decrementare. ++ Incrementare -- Decrementare Acetia sunt operatori unari. Pentru operanzi ntregi i reali, efectul este de adugare a valorii 1, respectiv de scdere a valorii 1 din operand. Exemplu int num = 8; num++; //num va avea valoarea 9 Acelai efect poate fi obinut prin num = num + 1; Operatorii ++ i -- pot fi att operatori prefix: ++num; ct i operatori postfix: num++; C++ permite folosirea lui ++ i -- n interiorul unor expresii mai lungi: Exemplu alpha = num++ * 3;

Afiarea
Tiprirea rezultatelor se face n C++ folosind o variabil special numit cout mpreun cu operatorul de inserie (<<). Exemplu cout << Hello; Aceast instruciune afieaz caracterele Hello la dispozitivul standard de ieire, de obicei ecranul. Variabila cout este predefinit n C++ i semnific un flux de ieire. Acesta poate fi imaginat ca o secven nesfrit de caractere care merg ctre dispozitivul de ieire. Operatorul de inserie << (put to) folosete 2 operanzi. Cel din stnga este o expresie flux (stream) (de exemplu cout). n dreapta se afl irul sau expresia al crei rezultat trebuie afiat. Exemplu cout << The answer is; cout << 3 * num; De remarcat faptul c operatorul << arat sensul n care circul datele: dinspre expresie sau string nspre streamul de ieire. Operatorul << poate fi folosit de mai multe ori ntr-o singur instruciune de afiare: Exemplu cout << The answer is << 3 * num; i rezultatul este acelai. Exemplu int i = 2; int j = 6; Instruciune Ce se tiprete cout << i; 2 cout << i = << i; i = 2 cout << j: << j << i: << i; j:6 i:2 Dac dorim s afim un ir care conine caracterul trebuie s plasm semnul \ naintea : 9

Programarea calculatoarelor i limbaje de programare I

Exemplu cout << Al \Butch\ Jones; iar pe ecranul calculatorului va aprea: Al Butch Jones n mod obinuit, mai multe instruciuni de ieire succesive afieaz rezultatele continuu, pe aceeai linie: cout << Hi; cout << there; genereaz Hithere Pentru a tipri pe linii separate scriem: cout << Hi << endl; cout << there << endl; i obinem: Hi There Identificatorul endl (end line) este un element special din C++: este un manipulator. Este suficient de tiut acum c endl permite terminarea unei linii i continuarea scrierii pe linia urmtoare.

2.8

Construirea unui program

Vom vedea cum asamblm diferitele elemente prezentate pn acum pentru a construi un program. Un program C++ este format din clase i funcii, una dintre funcii numindu-se obligatoriu main. Un program poate conine declaraii n afara oricrei funcii. Modelul unui program este: Declaraie ... Definiie de clas Definiie de clas ... Definiie de funcie Definiie de funcie ... O definiie de funcie se construiete dup urmtorul model: Heading { Instruciune ... } Vom da exemplu de un program cu o singur funcie, funcia main. //**************************************** //Temperaturi.cpp //Acest program calculeaza temperatura de //la jumatatea dintre punctul de inghet si //cel de fierbere a apei //**************************************** #include <iostream> using namespace std;

10

Programarea calculatoarelor i limbaje de programare I

const float INGHET = 0.0; //Punctul de inghet al apei const float FIERBERE = 100.0; //Punctul de fierbere int main() { float temperaturaMedie;

//Pastreaza rezultatul medierii //dintre INGHET si FIERBERE

cout << "Apa ingheata la " << INGHET << " grade"; cout << " si fierbe la " << FIERBERE << " de grade." << endl; temperaturaMedie = INGHET + FIERBERE; temperaturaMedie = temperaturaMedie / 2.0; cout << "Temperatura medie este de "; cout << temperaturaMedie << " grade." << endl; } return 0;

Programul ncepe cu un comentariu care explic ce face programul. Urmeaz #include <iostream> care insereaz coninutul fiierului iostream n programul nostru. El conine informaiile necesare lucrului cu stream-uri de intrare i de ieire, ca de exemplu cout. Urmeaz declararea constantelor INGHET i FIERBERE. Restul programului este definiia funciei main. Mai nti heading-ul urmat de {}. Aceste acolade informaz compilatorul c main este o funcie. Corpul funciei cuprinde declararea variabilei tempMedie urmat de o serie de alte instruciuni executabile. Funcia main returneaz 0. De notat aranjarea liniilor de program, spaierea i folosirea comentariilor.

Blocuri (instruciuni compuse)


Corpul unei funcii este un exemplu de bloc: { Instruciune ... } Un bloc conine 0 sau mai multe instruciuni cuprinse ntre {}. O instruciune se termin obligatoriu cu ; Exist i instruciunea vid: ; Obinuim ca instruciunile dintr-un bloc s le deplasm puin spre dreapta pentru claritatea programului. De asemenea, putem opta pentru gruparea instruciunilor prin separarea grupurilor cu rnduri libere.

2.9

Preprocesorul C++

Imaginai-v c suntei n rolul compilatorului de C++ i vi se prezint urmtorul program: int main() 11

Programarea calculatoarelor i limbaje de programare I

} Recunoatei identificatorul int ca fiind cuvnt rezervat C++ i main ca fiind numele unei funcii care trebuie s existe n mod obligatoriu. Dar cout i endl? Nu au fost declarate ca i variabile sau constante i nu sunt cuvinte rezervate. Vei afia urmtorul mesaj de eroare: In function int main(): Line 3: cout undeclared Line 3: endl undeclared Pentru a corecta eroarea, programatorul trebuie s insereze la nceputul programului linia #include <iostream> Ea spune c ntreg coninutul fiierului iostream va fi inserat n program. El conine declaraiile lui cout i endl. Instruciunea #include nu este interpretata de compilatorul C++, ci de un program numit preprocesor. El acioneaz ca un filtru i precede faza de compilare. O linie care ncepe cu # se numete directiv de preprocesare. Program surs Expandarea programului surs Compilator C++

cout << "Happy Birthday" << endl; return 0;

Preprocesor

La preprocesare sunt posibile urmtoarele aciuni: Includerea altor fiiere n fiierul care urmeaz s fie compilat Definirea constantelor simbolice i a macrourilor (macrourile sunt specifice limbajului C i nu le vom prezenta) Compilarea condiional

Directiva de preprocesare #include


Aceast directiv de preprocesare produce includerea n codul surs a unei copii a fiierului specificat. Ea are dou forme. Prima form este cea n care se folosesc semnele < > ca n directiva #include <iostream> Acestea indic faptul c de referim la un fiier din biblioteca standard iar preprocesorul caut acel fiier n directorul standard pentru includere. n varianta #include consum.dat Ghilimelele arat c fiierul consum.dat se gsete n acelai director cu fiierul surs.

Directiva de preprocesare #define: constante simbolice


Prin directiva de preprocesare #define se pot defini constante simbolice. Exemplu #define PI 3.14159 Proprocesorul va nlocui toate apariiile lui PI din textul care urmeaz declaraiei cu valoarea 3.14159. Dac dorim s modificm valoarea constantei, aceasta poate fi 12

Programarea calculatoarelor i limbaje de programare I

modificat prin nlocuirea valorii din directiva de preprocesare. Diferenele dintre constantele definite prin cuvntul cheie const i constantele definite prin directive de preprocesare sunt c primele au un tip de dat i c sunt vizibile n faza de debugging. Odat nlocuit o constant de ctre preprocesor, doar valoarea sa va mai fi vizibil. Directiva de preprocesare #define DEBUG n care lipsete valoarea asociat constantei terge orice apariie a identificatorului DEBUG din fiierul surs. Identificatorul rmne definit i poate fi testat prin directivele #if defined sau #ifdef. Exist 5 constante simbolice predefinite: Constanta simbolic Descrierea __LINE__ Numrul liniei curente din fiierul surs __FILE__ Numele fiierului surs __DATE__ Data la care a fost compilat fiierul surs __TIME__ Ora la care a fost compilat fiierul surs __STDC__ Constanta ntreag 1 Directiva de preprocesare #undef aplicat unei constante simbolice sau unui macro definite prin #define realizeaz tergerea definiiei.

Compilarea condiional
Compilrile condiionate permit programatorilor s controleze execuia directivelor de preprocesare i a compilrii programului surs. Compilrile condiionale pot fi realizate prin folosirea directivelor de preprocesare #ifndef i #ifdef. Codul #ifndef NULL #define NULL 0 #endif verific dac NULL a fost deja definit n program, iar daca daca nu, o definete. Compilarea condiional se folosete de regul pentru debugging. Se folosesc instruciuni de afiare care tipresc valorile unor variabile i care confirm fluxul corect al programului. Aceste afiri care nu mai sunt necesare dupa ce programul a fost corectat sunt, de regul, ncadrate de directive condiionale de preprocesare. Exemplu #ifdef DEBUG cout << "Variabila x = " << x << endl; #endif

13

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