Metode evoluate de programare Limbajele c şi C++



Yüklə 1,64 Mb.
səhifə4/44
tarix07.04.2018
ölçüsü1,64 Mb.
#46828
1   2   3   4   5   6   7   8   9   ...   44

1.4. Preprocesare

Un program sursă C poate fi prelucrat înainte de a fi compilat. O astfel de prelucrare se numeşte preprocesare sau precompilare. Acest lucru se realizează printr-un program special numit preprocesor. Acesta este apelat automat înainte de a începe compilarea.

Preprocesorul limbajului C realizează următoarele:


  1. includeri de alte fişiere (de obicei fişiere sursă);

  2. definiţii şi apeluri de macrouri simple;

  3. compilare condiţionată.


1.4.1. Includerea unui fişier sursă

Fişierele sursă pot fi incluse cu ajutorul directivei include.

Două formate se folosesc pentru a include un fişier sursă în locul în care apare directiva (de obicei se pune la începutul programului):
#include “specificator_de_fisier”

sau


#include
unde: specificator_de_fişier trebuie să fie un nume de fişier valid din punct de vedere al sistemului de operare DOS şi de obicei are extensia “.h” sau “.c”.

Prima variantă este folosită de obicei când fişierele de inclus sunt furnizate de utilizator; dacă nu este indicată calea atunci fişierele sunt căutate în directorul curent şi apoi în directoarele setate pentru directiva include.

A doua variantă este folosită pentru încorporarea unui fişier standard care se caută în directoarele setate pentru directiva include (de obicei astfel de fişiere standard sunt livrate în biblioteci ataşate mediului de programare C).

Odată localizat fişierul dintr-o directivă include se înlocuieşte aceasta prin textul fişierului sursă. Deci compilatorul nu va mai întâlni directiva include ci textul fişierului inclus de preprocesor.

Includerile de fişiere se fac de obicei la început pentru ca textele fişierelor sursă (date şi funcţii) să poată fi utilizate în tot fişierul sursă de lucru. De aceea, la începutul fişierelor sursă vom întâlni mai multe includeri de fişiere standard: stdio.h, stdlib.h, etc. Textul unui fişier inclus poate la rândul său să conţină directiva include. Fişierul stdio.h (prescurtarea de la standard input output header) conţine printre altele şi funcţiile standard de intrare-ieşire printf şi scanf. Fişierele cu extensia “.h” se mai numesc şi fişiere header (fişiere care se pun la începutul fişierului sursă). Un alt exemplu de fişier header este iostream.h folosit în mediul BORLAND C++ care conţine funcţiile cin (console input) şi cout (console output).


1.4.2. Constante simbolice

Cu directiva define se pot defini constante simbolice şi macrouri. Constantele simbolice se definesc astfel:


#define nume succesiune_de_caractere
Preprocesorul substituie nume cu succesiune_de_caractere peste tot în fişierul sursă care urmează poziţiei directivei define. Dacă succesiune_de_caractere nu încape pe un rând atunci se poate continua pe rândul următor scriind caracterul “\” la sfârşitul primului rând.

Numele nume definit ca mai sus se spune că este o constantă simbolică. Se recomandă ca nume să fie scris cu litere majuscule pentru a scoate în evidenţă că este o constantă simbolică.

Construcţia succesiune_de_caractere folosită pentru a defini o constantă simbolică poate la rândul ei să conţină alte constante simbolice.

O constantă simbolică poate fi redefinită (tot cu define) sau poate fi anihilată cu undef (#undef nume).


Exemple:
1) #define PROCENT 10 // din acest punct al fisierului sursa se substituie

// PROCENT cu 10

. . .

#define PROCENT 15 // de aici PROCENT se substituie cu 15



. . .

#undef PROCENT // din acest punct constanta simbolica PROCENT

// isi inceteaza existenta

. . .



  1. #define DIM 100 // s-au definit doua constante simbolice DIM

#define DOI_PI (2*3.1415926) // si DOI_PI

. . .


int vector[DIM]; // DIM va fi inlocuit cu 100

. . .


x=DOI_PI;

. . .


2. Clase de variabile (de memorie)

Compilatorul C alocă memorie variabilelor din program de dimensiune corespunzătoare tipului fiecăreia.

Memoria se alocă în 2 moduri:


  1. static, repartizată într-o zonă specială asociată programului;

  2. dinamic, repartizată într-o zonă specială numită stivă (se comportă ca o listă LIFO).

În funcţie de modul cum se alocă memorie, vom distinge mai multe clase de variabile.

O primă clasă de variabile este aceea a variabilelor globale cărora li se alocă memorie pe toată durata execuţiei programului şi ele pot fi utilizate în orice funcţie a programului. Altă clasă de variabile este clasa variabilelor locale, aceste variabile au o utilizare locală la nivelul unei funcţii.

2.1. Variabile globale

O variabilă globală are o definiţie şi atâtea declaraţii de variabilă externă câte sunt necesare.

Definiţia unei variabile globale coincide sintactic cu o declaraţie obişnuită, dar care este scrisă în afara oricărei funcţii a programului. Implicit, definiţia unei variabile globale determină ca variabila respectivă să fie definită începând din punctul scrierii ei şi până la sfârşitul fişierului sursă respectiv. De aceea se recomandă ca definiţiile variabilelor globale să fie scrise la începutul fişierului sursă, pentru a fi accesate în orice funcţie a fişierului.

Pentru a utiliza variabilele globale şi în alte funcţii situate în alte fişiere sursă decât în cel în care sunt definite, ele trebuie declarate ca externe în funcţiile respective.

O declaraţie de variabilă externă coincide cu o declaraţie obişnuită doar că începe cu cuvântul cheie extern.
Exemplu:

fişierul în care sunt declarate ca variabile globale fişierul în care sunt folosite ca variabile externe


int i;

float f; void functie(. . .)

void main(void) { extern int i;

{ i = 10; extern double f;

. . . . . .

f = 3.14; f = f*i;

. . . . . .

} }


Variabilele i şi f sunt declarate în afara funcţiei main şi în afara oricărei funcţii, deci sunt variabile globale. Ele pot fi folosite în toate funcţiile din fişierul sursă care conţine definiţiile lor. Pentru a le utiliza în funcţii situate în alte fişiere sursă decât în cel în care sunt definite ele sunt declarate ca externe. Deci variabilele i şi f sunt declarate ca externe în funcţia functie din al doilea fişier sursă. Cele două fişiere sursă care pot fi scrise în momente şi de persoane diferite se pot asambla într-un singur program cu ajutorul directivei de preprocesare include.



Yüklə 1,64 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9   ...   44




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin