preprocesare

29
MINISTERUL EDUCAȚIEI ACADEMIA DE STUDII ECONOMICE FACULTATEA “CIBERNETICĂ STATISTICĂ și INFORMATICĂ ECONOMICĂ ” LUCRARE DE LABORATOR nr.1 PREPROCESARE

Upload: igleo89

Post on 29-Nov-2015

15 views

Category:

Documents


0 download

DESCRIPTION

Preprocesare

TRANSCRIPT

Page 1: Preprocesare

MINISTERUL EDUCAȚIEIACADEMIA DE STUDII ECONOMICE

FACULTATEA “CIBERNETICĂ STATISTICĂ și INFORMATICĂ ECONOMICĂ ”

LUCRARE DE LABORATOR nr.1

PREPROCESARE

Chișinau 2012

Page 2: Preprocesare

CuprinsScopul lucrarii........................................................................................................................................................2

1.Notiunea de fisier , extensie...............................................................................................................................2

2.Etapele de trecere : codul sursa-modul executabil............................................................................................4

3.Directivele de preprocesare #include, #define , #undef.....................................................................................5

4.Lansarea in executie a programului in mediul IDE..............................................................................................8

5. Modul - fisierele nume .h si nume .cpp ............................................................................................................9

6Preprocesare-directivele #if, # endif ,# ifdef, # ifndef, # else ,# elif,#line,#error).............................................11

8.Funtia principala main.....................................................................................................................................13

9.Compilarea si depanarea modulului.................................................................................................................15

10.Lansarea release-ului......................................................................................................................................17

Concluzie.............................................................................................................................................................19

Bibliografie..........................................................................................................................................................19

1

Page 3: Preprocesare

Lucrare de laborator nr.1 “Preprocesare”

Scopul lucrarii

Aceasta lucrare are drept scop :

- Recapitulare ;

- Fixarea punctelor de studiu in cadrul obiectului POO.

1.Notiunea de fisier , extensie.

Un fişier este o secvenţă completă de baiţi ce intră în componenţa unei colecţii particulare de date

stocate în format electronic. Prin colecţie particulară de date, trebuie înţeles o anumită cantitate de date

ce serveşte unui scop anume cum ar fi o imagine, un sunet, un text etc.[1]

Un fişier este un document, un pachet de informaţii cu un nume ataşat la acesta .

De cele mai multe ori fişierele sunt stocate în foldere, pe desktop sau în dispozitive externe ca un USB

sau un hard disk extern.

În informatică, un fișier este o colecție de inregistrari, stocate de obicei pe un dispozitiv de stocare

numit și „purtător de date”; un echipament modern este de exemplu discul dur. Procedeul și algoritmul

folosit pentru alocarea de spațiu unui fișier pe dispozitivul de stocare se numește „alocare de fișiere”

(în engleză: file allocation). Alocarea asigură accesul utilizatorilor la fișiere și facilitează lucrul cu

acestea.[2]

În funcţie de tipul fişierului accesat, în Windows sunt posibile trei evenimente distincte:

1. Se deschide un program

Aţi accesat un fişier executabil sau un fişier care face legătura către un fişier executabil.

2.Se deschide un program care interprezează datele conţinute de fişierul accesat

Majoritatea fişierelor nu sunt direct executabile – adică funcţionează doar împreună cu programul care

le-a creat sau cu un alt program compatibil. Posibilitatea de a deschide un fişier direct în programul în

care a fost creat sau într-un alt program compatibil se datorează unui sistem de asociere a fişierelor.

3. Se deschide un dialog standard din Windows

În această situaţie fişierul accesat nu este asociat cu vreun program dintre cele disponibile. Aveţi

posibilitatea de a alege dintr-o listă un program care să deschidă fişierul în cauză.

Adresele fisierelor

Adresa este formată întotdeauna din doar trei parţi:

dispozitiv de stocare (drive)

dosar şi eventual subdosare

nume complet fişier

2

Page 4: Preprocesare

Adresa nu este sensibilă la majuscule sau minuscule. Puteţi scrie o adresă folosind litere minuscule

sau majuscule indiferent de denumirea reală a unui dosar sau fişier.[3]

În domeniul calculatoarelor este numit extensie sau format de fișier sufixul numelui de fișier, separat

de numele propriu-zis al fișierului printr-un punct („.”). Convențional extensia exprimă formatul intern

sau tipul de date conținute în fișier.

Formate de fișier

În funcție de scopul și semnificația datelor unui fișier, dar și de organizarea lor internă, fișierele se

creează într-unul dintre numeroasele formate predefinite.Exemple pentru formate predefinite foarte

răspândite și extensiile respective: [4]

Dacă primele sisteme de fişiere acceptau ca denumirea unui fisier sa fie de maxim 8 caractere,

astăzi denumirea unui fişier poate conţine  mult mai multe caractere decât are nevoie o

persoana .Denumirele prea lungi se dovedesc contraproductive şi sunt evitate de obicei în favoarea

unor denumiri concise ce rezumă eficient conţinutul fişierului deservit.

În sistemele de fişiere adoptate de la Windows 95 încoace denumirea unui fişier trebuie să se încadreze

între 1 şi maxim 255 de caractere alfanumerice sau speciale.

Extensia sau sufixul se prezintă ca un grup de caractere (de obicei în număr de trei) ce apare la

finalul denumirii fişierului. Delimitarea dintre denumirea propriu-zisă şi extensie este facută printr-un

punct, structura denumirii arătând astfel:

nume fişier . extensie

În denumirea unui fişier pot exista mai multe puncte, dar extensia vine întotdeauna numai după

ultimul punct.

Deşi extensia nu este obligatorie, fiecare fomat particular de fişier are o extensie proprie.

Prezenţa extensiei oferă posibilitatea determinării rapide a tipul de date stocate de un fişier.

Fişierele cu aceiaşi extensie pot fi asociate cu programul care le-a creat sau cu un alt program

compatibil. Efectul asocierii este unul foarte convenabil: atunci când accesaţi un fişier acesta va fi

deschis automat în cadrul programului cu care este realizată asocierea.

Aşadar dacă eraţi obişnuiţi ca pozele să se deschidă automat cu un anumit program, iar dintr-o dată se

deschid cu altul înseamnă că Windows-ul a asociat extensia respectivelor fişierele cu noul program.

Dacă un anumit fişier nu este asociat cu nici un program din cele disponibile, Windows vă oferă

posibilitatea de a indica programul cu care să se realizeze dechiderea fişierului.

Mai mult de atât, în Windows XP, aveţi şi posibilitatea de a folosi conexiunea la Internet pentru a găsi

un program compatibil cu fişierul în cauză.[5]

3

Page 5: Preprocesare

2.Etapele de trecere : codul sursa-modul executabilDupă analiza problemei şi stabilirea algoritmului, acesta trebuie tradus (implementat) într-un limbaj

de programare.

       Scrierea (editarea) programului sursă.

Programele sursă sunt fişiere text care conţin instrucţiuni (cu sintactica şi semantica proprii

limbajului utilizat). Programul (fişierul) sursă este creat cu ajutorul unui editor de texte şi va fi

salvat pe disc (programele sursă C C++-extensia .cpp).

Pentru a putea fi executat, programul sursă trebuie compilat şi linkeditat.

       Compilarea

Procesul de compilare este realizat cu ajutorul compilatorului, care translatează codul sursă în cod

obiect (cod maşină), pentru ca programul să poată fi înţeles de calculator. În cazul limbajului C, în

prima fază a compilării este invocat preprocesorul. Acesta recunoaşte şi analizează mai întâi o

serie de instrucţiuni speciale, numite directive procesor. Verifică apoi codul sursă pentru a constata

dacă acesta respectă sintaxa şi semantica limbajului. Dacă există erori, acestea sunt semnalate

utilizatorului. Utilizatorul trebuie să corecteze erorile (modificând programul sursă). Abia apoi

codul sursă este translatat în cod de asamblare, iar în final, în cod maşină, binar, propriu

calculatorului. Acest cod binar este numit cod obiect şi de obicei este memorat într-un alt fişier,

numit fişier obiect. Fişierul obiect va avea, de obicei, acelaşi nume cu fişierul sursă şi extensia

.obj. 

       Linkeditarea

Dupa ce programul sursă a fost translatat în program obiect, el este va fi supus operaţiei de

linkeditare. Scopul fazei de linkeditare este acela de a obţine o formă finală a programului, în

vederea execuţiei acestuia. Linkeditorul “leagă” modulele obiect, rezolvă referinţele către funcţiile

externe şi rutinele din biblioteci şi produce cod executabil, memorat într-un alt fisier, numit fişier

executabil (acelaşi nume, extensia .exe).

       Execuţia

Lansarea în execuţie constă în încărcarea programului executabil în memorie şi startarea execuţiei

sale. [6]

 

4

Page 6: Preprocesare

3.Directivele de preprocesare #include, #define , #undefStructura unui program este următoarea:

Directive de procesare,

Declaraţii de date globale,

Declaraţii de funcţii, sau doar [ Antete de funcţii (prototipuri) ]

Funcţia principală;

[ Descrierea funcţiilor (implementări) ]

Înaintea primei faze din cadrul procesului de compilare trebuie realizată de cele mai multe ori o

preprocesare. Preprocesorul translatează un program al cărui limbaj sursă este de nivel înalt (C,

Pascal) într-un program destinaţie (obiect) scris tot într-un limbaj de nivel înalt C. Practic are loc

interpretarea directivelor de preprocesare (încep cu # - include, define, if !defined(…)…endif). [7]

Directivele preprocesorului sunt liniile incluse în codul de programele noastre, care nu sunt declaratii

program, dar directivele pentru preprocesor. Aceste linii sunt întotdeauna precedate de un diez (#).

Preprocesor este executată înainte de elaborarea efectivă a codului începe, prin urmare, preprocesor

digera toate aceste directive înainte de orice cod este generat de declarațiile. [8]

Înainte de compilare, un program este precompilat, de către un preprocesor, care permite includerea

unor fişier sursă, definirea şi apelul unror macrouri, precum şi o compilare condiţionată.

Includerea unui fişier sursă (*.h sau *.c) se realizează prin directiva include astfel:

# include “specificator_fişier” // pentru fişiere utilizator

sau

# include <specificator_fişier> // pentru fişiere standard

Exemplu:

#include <stdio.h>; // Standard Input Output Header

#include <iostream.h>; // Console Input, Console Output

# include<iostream.h>

             pentru citiri sau scrieri

parantezele unghiulare < > indică faptul că este vorba de un fişier header sistem (predefinit). Când

procesorul întâlneşte această linie, datorită simbolului #, o recunoaşte ca fiind o directivă preprocesor,

localizează fişierul header indicat.

      Programatorul isi poate crea propriile fisiere header caz in care acesta va fi incadrat intre " " . De

exemplu:

#include "headerul_meu.h"

5

Page 7: Preprocesare

Numele fişierului header inclus între ghilimele, indică faptul că headerul_meu.h este un fişier header

creat de utilizator. Preprocesorul va căuta să localizeze acest fişier în directorul curent de lucru al

utilizatorului. În cazul în care fişierul header nu se află în directorul curent, se va indica şi calea către

acesta.

Exemplu:

#include "c:\\bc\\head\\headerul_meu.h"

Constantele simbolice se definesc cu ajutorul directivei define astfel:

#define Nume_constantă Şir_caractere

Exemplu:

#define Pi 3.141592 // Înlocuieşte Pi cu 3.141592

O constantă simbolică poate fi redefinită sau anulată (#undef Nume_constantă).[9]

Pentru a defini macrocomenzi Preprocessor care le putem folosi # define. Formatul său este:

# Define identificator de înlocuire

Atunci când se confruntă cu această directivă preprocesor, îl înlocuiește orice apariție a identificator în

restul codului de înlocuire. Această înlocuire poate fi o expresie, o declarație, un bloc sau pur și simplu

nimic. Preprocesor nu intelege C + +, pe care o înlocuiește pur și simplu orice apariție a identificator

de înlocuire.

#define TABLE_SIZE 100 int table1[TABLE_SIZE]; int

table2[TABLE_SIZE];

După ce a înlocuit preprocesor TABLE_SIZE, codul devine echivalent cu:

int table1[100]; int table2[100];

# define poate lucra, de asemenea, cu parametrii pentru a defini macrocomenzi funcții:

6

Page 8: Preprocesare

  #define getmax(a,b) a>b?a:b

Avantaje ale folosirii directivei #define

1. Lizibilitate marita. Se refera la citirea si intelegerea rapida a fisierului sursa (PI stim ce inseamna si

ne amintim ca este 3.ceva, deci nu trebuie sa scriem de fiecare data valoarea sa);

2. Schimbarile ulterioare ale unor valori constante se face foarte usor. De exemplu, vrem sa modificam

valoarea lui LIMIT la 10000.

In locul liniei:

#define LIMIT 100

scriem

#define LIMIT 10000[10]

Macrocomenzile sunt definite nu sunt afectate de structura de bloc. O macrocomandă durează până

când acesta este nedefinit cu directiva preprocesor # UNDEF:

#define TABLE_SIZE 100 int table1[TABLE_SIZE]; #undef TABLE_SIZE #define TABLE_SIZE 200

int table2[TABLE_SIZE];

Acest lucru ar genera același cod ca:

int table1[100]; int

table2[200];[11]

7

Page 9: Preprocesare

4.Lansarea in executie a programului in mediul IDE I.D.E. este o prescurtare pentru Integrated Development Environment (tradus: Mediu Integrat de

Dezvoltare), şi reprezintă un pachet de programe, printre care un editor de cod, un compilator şi un

linker, la care se adaugă o interfaţă grafică pentru toate acestea. Avantajul IDE-urilor este acela că

uşurează procesul de compilare (din punctul de vedere al utilizatorului), pentru că toţi paşii necesari

sunt efectuaţi automat, la apăsarea unei taste.[12]

Borlandc C++, produs al firmei Borland International, este un pachet de programe care oferă o

implementare a limbajului C după standardul ANSI şi o implementare a limbajului C++.

Extensiile implicite pentru cele doua categorii de fişiere sunt .C respective .CPP.

Mediul de dezvoltare integrat (IDE: Integrared Development Environment) oferă toate facilitaţile

necesare pentru editarea, compilarea, linkeditarea şi depanarea programelor .

Pentru a lucra organizat se va face un director numit LUCRU, în C:TEMP sau în C:LABORATOR. În

acest director de lucru se vor salva toate sursele (fişierele cu extensia .C, .CPP, .PRJ, .H ), precum şi

celelalte fişiere rezultate în urma compilării, linkeditării (extensiile .obj,.exe) şi orice alt fişier

personal.

Pentru ca la lansarea mediului, directorul implicit de lucru să fie cel stabilit mai sus se face click

dreapta pe icon-ul BorlandC++ for Dos, se alege Properties → Program şi în căsuţa de editare

Working se completează calea către directorul de lucru dorit, în cazul nostru c:laboratorlucru. În acest

caz la apăsarea tastei F2 (pentru salvare) sau la F3 (pentru a deschide un nou fişier), directorul de lucru

va fi cel stabilit mai sus şi nu mai este nevoie să schimbăm directorul pentru a face salvare / deschidere

fişiere. Fişierele care se văd la un moment dat în fereastră sunt cele de pe directorul curent şi au o

anumita extensie. Dacă este *.cpp se văd fişierele CPP, dacă este *.C se văd fişierele C, dacă

este .TXT se văd cele text etc. Dacă este *.* se văd toate fişierele cu toate extensiile şi toate

subdirectoarele directorului curent.[13]

8

Page 10: Preprocesare

5. Modul - fisierele nume .h si nume .cpp .In fisierele .h gasesti toate functiile si tipurile de date exportate de modul .

Fisierele .cpp sau .c reprezinta implementarea functiilor din .h .

In program se recomanda includerea fisierelor .h, daca exista (ex. #include )

Includerea __sierelor antet prin directiva

#include

Aceasta este urmat_a de numele __sierului antet utilizat de program ^_ntre paranteze unghiulare

<>. Aceste fisiere au extensia .h _si cont_in de_nit_ii _si instruct_iuni necesare pentru realizarea

multor funct_ii utile precum: introducerea _si a__sarea datelor (iostream.h),folosirea unor funct_ii

matematice (math.h), citirea sau scrierea datelor ^_n __siere de pe disc (fstream.h), convertirea

numerelor ^_n text _si invers, funct_ia exit (stdlib.h), manipularea timpului _si a datei (time.h),

manipularea ecranului (conio.h) etc. [14]

Atunci când compilatorul întâlneşte un apel la o funcţie, el trebuie să poată verifica

concordanţa între parametrii actuali şi cei formali şi are nevoie de tipul rezultatuluifuncţiei

pentru a face conversiile necesare evaluării expresiei. Pentru aceasta estenevoie de o

definiţie a funcţiei în care apar tipurile parametrilor şi tipul rezultatului. Această definiţie se

numeşte şablon sau prototip şi are formatip numefuncţie(tip, tip, …,);De exemplu, funcţia sin are un

singur parametru de tip double,iar rezultatul este de tipdouble; prototipul funcţiei sin estedouble

sin(double);Limbajele C şi C++ au biblioteci standard cu prototipurile funcţiilor limbajului.

Deasemenea, utilizatorul poate defini biblioteci cu prototipuri. Toate aceste biblioteci sunt

semnalate compilatorului cu directive include cu forma# include nume_bibliotecăAceste biblioteci

sunt fişiere numite fişiere header sau antet. Directiva include estediferită în cazul limbajului C

de cea din limbajul C++.In cazul l imbajulu i C f i ş ie re le header au extens ia h . De

exemplu , b ib l io tecacu  prototipurile funcţiilor intrare/ieşire tip C este stdio.h, biblioteca

cu prototipurilefuncţiilor matematice este math.h, biblioteca cu prototipurile funcţiilor de

prelucrat şiruri tip C este string.h, etc. In consecinţă, în cazul unui program în limbajul C vomsemnala

compilatorului aceste biblioteci cu directivele# include <stdio.h># include <math.h>I n l i m b a j u l

C + + f i ş i e r e l e h e a d e r n u a u e x t e n s i e . D e e x e m p l u , b i b l i o t e c a

c u  prototipurile funcţiilor intrare/ieşire tip C++ este iostream. La utilizarea în limbajul C+

+, b ib l io tec i le spec i f ice l imbajulu i C sunt redef in i te ca <cs td io>,

<cmath>,<cstring>, etc. In plus, toate funcţiile standard ale limbajelor C şi C++ sunt

grupateîntr-un spaţiu de nume denumit

std.

9

Page 11: Preprocesare

In consecinţă, putem semnala compilatorului  bibliotecile standard iostream şi math astfel#

include <iostream># include <cmath>using namespace std;Putem defini propriile biblioteci cu

prototipuri pe care să le semnalăm compilatoruluicu directiva include. Numele propriilor

biblioteci cu prototipuri sunt scrise întreghilimele

In sectiunea precedenta fisierele.c si .h definesc impreuna o parte a

programului.Fisierul.h este interfata utilizata de alte parti ale programului; fisierul.c

specificaimplementarea.O astfel de entitate este numita, adesea, modul. Numai numele de care are

nevoie sale cunoasca utilizatorul se fac disponibile iar restul sint ascunse. Aceasta proprietatese

numeste adesea ascunderea datelor, chiar daca data este numai unul din lucrurilece se pot ascunde.

Acest tip de modul furnizeaza o flexibilitate mare. De exemplu, oimplementare poate consta din unul

sau Mai multe fisiere.c si diferite interfete ce potfi furnizate sub forma de fisiere.h. Informatia pe care

un utilizator nu este necesar sao cunoasca este ascunsa in fisierul.c. Daca se considera ca utilizatorul

nu trebuie sastie exact ce contine fisierul.c, atunci el nu trebuie sa fie disponibil in sursa. Fisierelede tip

.obj sint suficiente.Este uneori o problema ca aceasta flexibilitate sa fie atinsa fara o structura

formala.Limbajul insusi nu recunoaste un astfel de modul ca o entitate si nu exista nici o caleca ,

compi la torul sa faca d is t inc t ie in t re f i s ie re le .h care def inesc nume ce sa

f ieutilizate de alte module (exportate) de fisierele.h folosite pentru a declara nume dinalte module

(importate). Alta data, poate fi o problema ca un modul sa defineasca unset de obiecte si nu un nou

tip. De exemplu, modulul table defineste o tabela; dacanoi dorim doua tabele, nu exista un

mod trivial de a furniza celalalt tabel utilizindaceasta idee de module. Capitolul 5 prezinta o

solutie a acestei probleme.[15]

10

Page 12: Preprocesare

6Preprocesare-directivele #if, # endif ,# ifdef, # ifndef, # else ,# elif,#line,#error) Preprocesarea este prelucrarea textului sursa al programului inaintea etapei de compilare. In limbajul

C++ preprocesarea se realizeaza cu ajutorul directivelor de preprocesare. Acestea sunt recunoscute de

compilator prin prezenta caracterului “#”.

Preprocesorul are directive pentru compilare conditionata. Acestea pot fi folosite pentru dezvoltarea

programelor si pentru scrierea codului mai portabil de la o masina la alta. Fiecare directiva de forma

#if expresie_integrala_constanta

#ifdef identificator

#ifndef identificator

implica compilarea conditionata a codului care urmeaza pana la directiva de precompilare

#endif

Pentru compilarea codului de mai sus, in cazul lui #if trebuie ca expresia constanta sa fie diferita de

zero (true), in cazul lui #ifdef numele identificatorului trebuie sa fie definit anterior intr-o linie #define,

fara interventia directive

#undef identificator

In cazul lui #ifndef, numele identificatorului trebuie sa nu fie curent definit. Expresia constanta

integrala folosita intr-o directiva de precompilare nu poate contine operatorul "sizeof" sau un cast.

Folosirea lui #include. [16]

 Directiva # error

 Directiva #error forteaza compilatorul sa stopeze operatia de compilare cind aceasta este intilnita in

program Este utilizata in primul rind pentru depanarea programelor.Forma generala a directive este :

#error mesaj_de_eroare

Aceasta linie determina procesorul sa scrie mesajul de eroare sis a termine compilarea.

 Compilarea conditionata permite includerea/excluderea unor sectiuni din codul sursa in functie de

anumite criterii. In C++ se folosesc directivele de compilare conditionata #if, #else, #elsif si #endif.

Sintaxa este:

#if expresie_1sectiune_1

#elif expresie_2sectiune_2

…#else

sectiunie_n#endifunde:

11

Page 13: Preprocesare

expresie_n este o expresie formata din constante sau simboluri definite cu #define; expresia este considerata adevarata daca este diferita de 0;

partile #elif si #else sunt optionale; sectiune_n reprezinta o secventa de cod de inclus in codul sursa al programului in functie de

valoarea expresiei;  Cele mai uzuale utilizari pentru directivele de compilare conditionata sunt:

a)      compilarea unor portiuni din codul sursa doar in pentru versiunile de depanare: int CalculSuma(int v[], int n){// se va afisa doar in versiunea de DEBUG#if _DEBUG

cout << "Calcul suma pentru vector cu " << n << " elemente." << endl;

#endif 

// calcul sumaint suma = 0;for (int i = 0; i < n; i++)

suma += v[i];#if _DEBUG

cout << "Suma calculata este " << suma << endl;#endif 

return suma;} Mesajele vor fi afisate doar daca programul este compilat in versiunea de depanare. Simbolul _DEBUG este definit automat de Visual Studio in cazul in care se selecteaza versiunea Debug din Build->Set active configuration.

b)      evitarea dublei incluziuni a fisierelor header:#ifndef LISTE_H#define LISTE_H // definitii obiecte// ... #endif //LISTE_H In acest fel se poate evita includerea fisierului de mai multe ori. La prima includere conditia este true si se va include continutul format din declararea simbolului si codul sursa. La cea de-a doua includere conditia va fi false si continutul nu va mai fi inclus.[17]

12

Page 14: Preprocesare

8.Funtia principala main

O functie este un grup de instructiuni conexe,care impreuna realizeaza o anumita sarcina.

Numele functie este modul in care se face referire la aceste intructiuni conexe.

Un program poate avea mai multe functii,totusi un program trebuie sa aiba o functie principala(main)

si numai una.Motivul este ca functia principala este punctul de pornire pentru fiecare program c+

+.Daca nu ar exista o functie principala,calculatorul nu ar sti de unde incepe programul.

Daca ar fi fost mai multe functii principale,programul nu ar sti cu care dintre ele sa inceapa.[18]

Parametrii disponibili la apelul funcţiei main sunt:

-argc:numărul argumentelor din linia de comandă(inclusiv numele programului);

- argv:un tablou de pointeri către fiecare din argumentele liniei de comandă;

în particular,arg conţine numele programului executabil.În cazul în care programatorul nu doreşte să

utilizeze argumentele (parametrii) transmise la execuţie, este permisă utilizarea funcţiei main f ără

parametri: int main( ) este o declaraţie validă  pentru funcţia main.[19]

O functie se declara astfel:

[tip] nume-functie ( lista-declaratori-parametri );

constructie numita în standardul Ansi, prototip de functie.

În aceasta constructie "tip" reprezinta tipul functiei, adica mai precis, tipul valorii întoarse de

functie. Amintim ca o functie poate întoarce orice valoare, de orice tip, mai putin un tablou sau o alta

functie. Daca "tip" lipseste, atunci se considera implicit ca tipul functiei este int.

Daca o functie nu întoarce nici o valoare, pentru a se specifica prototipul ei se foloseste

cuvântul "void", astfel:

void nume - functie (lista - declaratori - parametri);

În ceea ce priveste parametrii unei functii, dupa nume - functie, între paranteze acestea se

specifica prin "lista - declaratori - parametri". Lista contine declaratori pentru parametri separati prin

virgule. Pentru fiecare parametru se declara tipul si eventual numele acestuia. [20]

Declararea tipurilor parametrilor ofera avantajul ca permite compilatorului sa faca verificari

privind numarul si tipul parametrilor, si în caz de necesitate sa faca, la apelul functiei, conversiile

astfel încât apelul sa se execute corect si sa elimine o posibila eroare, de altfel destul de dificil de

depistat si eliminat. Daca lista parametrilor formali este vida, în antet, dupa numele functiei, apar doar

parantezele ( ), sau (void).

Functiile pot fi descrise în cadrul aceluiasi fisier, sau în fisiere diferite, care sunt testate si

compilate separat, asamblarea lor realizându-se cu ajutorul linkeditorului de legaturi.

În limbajul C/C++ se utilizeaza declaratii si definitii de functii.

13

Page 15: Preprocesare

Declaratia contine antetul functiei si informeaza compilatorul asupra tipului, numelui functiei si a

listei parametrilor formali (în care se poate indica doar tipul parametrilor formali, nu si numele

acestora). Declaratiile de functii se numesc prototipuri, si sunt constituite din antetul functiei, din care

pot lipsi numele parametrilor formali.

Definitia contine antetul functiei si corpul acesteia. Nu este admisa definirea unei functii în corpul altei

functii. [21]

14

Page 16: Preprocesare

9.Compilarea si depanarea modulului--- Compilarea si excluderea erorilor de sinteza .

Erorile de sintaxă

Aceste erori sunt detectate de către compilator şi sunt datorate faptului că programul sursă nu

este conform cu regulile gramaticate ale limbajului.

Exemple de astfel de erori: lipsa caracterului ; la sfârşitul instrucţiunilor, variabile nedeclarate,

comentarii rămase deschise, paranteze neînchise, cuvinte cheie folosite necorespunzător, etc.

O eroare de sintaxă poate conduce la mai multe mesaje de eroare şi în multe cazuri, eliminarea unei

erori conduce la eliminarea altor "erori" declarate.

Erorile logice (bug-uri)

Aceste erori se datorează proiectării greşite a algoritmilor. De obicei nu cauzează erori în

timpul rulării programului, permiţând execuţia acestuia (ex.: scanf("%d",f);).

Erorile de acest tip sunt detectabile prin obţinerea de rezultate neaşteptate ale execuţiei programului şi

în consecinţă pot fi corectate prin rularea programului pe cazuri test, urmărind valorile obţinute şi

comparându-le cu cele aşteptate.

Erorile de rulare (run-time)

Aceste erori sunt detectate în timpul execuţiei programului şi se produc ca urmare a unor

operaţii ilegale de tipul: împărţire la zero, radical dintr-un număr negativ, etc.

Procesul de depistare şi corectare a erorilor unui program se numeşte debugging. Pentru operaţiile de

debugging este recomandată inserarea unor instrucţiuni de tipărire a valorilor variabilelor în diverse

locuri din program pentru a testa corectitudinea acestor valori la diferiţi paşi din program.

15

Page 17: Preprocesare

--- Fixarea punctelor de intrerupere –F5 si executie pina la cursor –F4

--- Puncte de control Watch List

Pentru a accesa Watch List se utilizeaza combinatia de taste Ctrl+F5 sau in meniul View se alege optiunea Debug Windows /Watches.

16

Page 18: Preprocesare

10.Lansarea release-ului Project/Options/Compiler

Butonul “Release”

Project/Options/Linker

Deactivam “use dynamic RTL”

Project/Options/Packages

17

Page 19: Preprocesare

Deactivam “Buid with run time packages”

Projects

Lansam “Build All Projects”

Concluzie In urma efectuarii lucrarii de laborator am realizat o recapitulare a cunostintelor in programarea C++, am studiat mai detaliat faza de preprocesare .La fel, am studiat careva particularitati a mediului Borland C++ si anume, cum are loc compilarea si depanarea modulului, cum are loc lansarea release-ului.

18

Page 20: Preprocesare

Bibliografie 1.Material metodic pentru lucrarea de laborator nr.12. Lucrari de laborator la disciplina C++,anul 1. 3. Surse Internet[1],[3] http://incepator.pinzaru.ro/diverse/ce-sunt-fisierele/ [2] http://doing2learn.eu/ro/node/1159[4] http://ro.wikipedia.org/wiki/Extensie_de_fi%C8%99ier[5] http://incepator.pinzaru.ro/diverse/ce-reprezinta-extensia-fisierelor/ [6] http://infoscience.3x.ro/c++/lectii/elemente%20de%20baza%20ale%20limbajului.html[7] http://webspace.ulbsibiu.ro/adrian.florea/html/docs/Final_ISIC_amprenta.pdf[8]http://translate.google.md/translate?hl=ru&langpair=en|ro&u=http://www.cplusplus.com/doc/tutorial/preprocessor/ [9]http://www.google.md/url?sa=t&rct=j&q=directiva%20de%20procesare%20define%20%20c%2B%2B&source=web&cd=1&ved=0CB4QFjAA&url=http%3A%2F%2Fwww.seap.usv.ro%2F~valeriul%2Flupu%2Fpoo.doc&ei=gLtgUMPWPMbQsgbe04GgBg&usg=AFQjCNEGKlzteCw3t_wyEF5TG1LFhIiSRQ&cad=rja [10] http://tutoriale.5c.ro/2011/03/lectia-6-folosirea-directivei-define/ [11]http://translate.google.md/translate?hl=ru&langpair=en|ro&u=http://www.cplusplus.com/doc/tutorial/preprocessor/ [12] http://www.bitcell.info/c-de-la-0-la-1-introducere-t212.html#ide [13] http://facultate.regielive.ro/laboratoare/limbaje-de-programare/limbaje-de-programare-automatica-49793.html [14] http://math.ucv.ro/~micu/sorin_files/c++.pdf [15] http://www.scribd.com/doc/88591857/49/Fisiere-si-Module [16] http://informatica.gotdns.com:7777/Programming/Documentatie/Documentatie%204/16.htm [17] http://ase.softmentor.ro/LimbajeEvoluate/03_Preprocesare.htm [18]http://alexso.ro/search.php?keywords=main&t=456&sf=msgonly&sid=f7da522bb03ab1d88051dd598a8ecf58[19] http://www.scribd.com/doc/78616725/24/Func%C5%A3ia-principal%C4%83-main[20] http://www.scritube.com/stiinta/informatica/c/FUNCTII73186.php [21] http://italianul.3x.ro/proiect/cap04.htm

19