Sunteți pe pagina 1din 4

2.

Construcţii de bază ale limbajului

i. Identificatori. Identificatorii sînt succesiuni de litere (mici sau mari, din


alfabetul englez), cifre şi _ (liniuţa de subliniere – caracterul underscore). Primul
caracter trebuie să fie literă sau liniuţă de subliniere (A) (nu se recomandă ca
primul caracter să fie _, pentru a nu se face confuzii nedorite cu identificatorii
rezervaţi folosiţi de diferite compilatoare). Lungimea unui identificator variază de
la un singur caracter până la oricâte, dar se iau în considerare numai primele 32.
Dacă doi identificatori au primele 32 de caractere identice, atunci ei vor fi
consideraţi identici de compilator (A). Unele compilatoare permit modificarea
acestei limite de lungime. Literele mari nu sînt identice cu cele mici (D).

Exemple: a, b, c, abc, Abc, aBc, x1, _, _a etc.


CodProdus nu are aceeaşi semnificaţie cu codprodus.

ii. Cuvinte rezervate. Există anumiţi identificatori cu utilizare fixă,


predefinită (A). Exemple: auto, do, if, else, char, long, float, for, return etc.
(din K&R C); const, enum, signed, void etc. (din ANSI C); _AL, _AX, _DX, _BX,
_FLAGS (din Turbo C). Aceşti identificatori sînt numiţi cuvinte rezervate.

iii. Comentarii. Comentariile sînt secvenţe de text cu format liber (în


general explicaţii în limbaj normal), care nu se compilează. În C acestea sînt
delimitate de perechile de caractere /* şi */.

Exemplu: /* Acesta este un comentariu */

Orice caracter aflat între delimitatori este ignorat de compilator. Nu se


admit comentarii imbricate. La compilatoarele C++ a fost adăugată posibilitatea de
a scrie comentarii pe un singur rînd. Începutul unui astfel de comentariu este
marcat de perechea // iar sfîrşitul său este marcat de sfîrşitul rîndului (nu există
marcator special). Orice caracter aflat după // este ignorat, pînă la trecerea pe un
rînd nou.
Ştiinţa învăţării unui limbaj de programare. Teorie

Exemplu: //Acesta este un comentariu


iv. Instrucţiuni. Construcţia instrucţiunilor necesită folosirea terminatorului
de instrucţiune ; (în Pascal era separator de instrucţiuni) (D). Instrucţiunile sînt
simple, structurate şi compuse. O instrucţiune compusă e formată dintr-o secvenţă
de instrucţiuni şi declaraţii (D) delimitate de acolade ( {, } ). Acoladele au acelaşi
rol ca BEGIN şi END din Pascal.
Formatul de scriere este liber (A). O instrucţiune poate fi scrisă pe mai
multe rînduri şi pe un rînd pot fi mai multe instrucţiuni. Unele compilatoare impun
o lungime maximă a rîndului de 128 de caractere.

v. Structura programului. Limbajul C este orientat pe funcţii. Ca urmare a


acestei orientări, programul principal este el însuşi o funcţie (care poate avea
parametri şi poate întoarce un rezultat de tip întreg): main (cuvînt rezervat) (D). O
funcţie este compusă din antet şi corp (A).
La modul general, un program este o înşiruire de funcţii şi declaraţii, între
care trebuie să existe o funcţie numită main. Aceasta este pusă în execuţie la
lansarea programului.
Forma generală a unei funcţii este:
antet
corp
Antetul este compus din: tipul rezultatului, numele funcţiei, lista
parametrilor formali: tip nume_functie(lista parametri).
Corpul funcţiei este e instrucţiune compusă. Structura unei funcţii va fi
detaliată în alt capitol.
Pentru funcţia main sînt permise mai multe forme ale antetului:
main()
int main()
void main()
main(void)
void main(void)
int main(void)

În orice program există o parte de declaraţii şi una executabilă


(instrucţiuni). Unele limbaje impun o separare foarte clară a acestora (Pascal,
Cobol), în timp ce altele (C/C++) sînt mult mai flexibile, păstrînd doar regula că
orice entitate trebuie să fie definită înainte de a fi referită. În C nu există nici un fel
de delimitare a celor două părţi logice; declaraţiile pot să apară între instrucţiuni.
Pentru a evita confuziile se recomandă însă ca declaraţiile să fie reunite la
începutul blocului de program pentru care sînt vizibile.
Modalităţile de declarare a variabilelor, tipurilor noi de date etc. vor fi
detaliate în continuare.
vi. Directive şi preprocesare. Înaintea compilării, în C se desfăşoară etapa
de preprocesare (D). În cadrul ei se efectuează substituiri asupra textului sursă
scris de programator. Prin preprocesare se asigură: inserarea de fişiere în textul
Construcţii de bază ale limbajului

sursă, definiţii şi apeluri de macro-uri, compilare condiţionată. Preprocesarea este


controlată prin directive. Acestea sînt formate din caracterul # urmat de un cuvînt
rezervat şi eventuali parametri.

Exemplu: #include<stdio.h>

Cele mai folosite directive sînt #include şi #define.


• Directiva #include este folosită pentru includerea de fişiere cu text sursă
în program. Forma ei este:
#include<specificator_de_fisier>
sau
#include”specificator_de_fisier”

Prima formă caută fişierul specificat între fişierele standard ale limbajului,
folosindu-se calea descrisă în mediul de programare. A doua formă caută fişierul
specificat în calea curentă (de obicei este folosită pentru a include fişiere scrise de
utilizator). Dacă fişierul căutat nu este găsit se produce o eroare de compilare. Dacă
fişierul este găsit, conţinutul lui este inserat în program, în locul directivei care l-a
invocat (aceasta este ştearsă – la limită poate fi considerată o substituire de text).
Pentru ca textul inclus să fie vizibil din tot programul, se recomandă ca
directivele #include să fie scrise la începutul programului. Un text inclus poate să
conţină la rîndul lui directive de includere care determină noi includeri de text.
Includerea de text sursă are un rol asemănător cu utilizarea unităţilor din
Pascal, dar nu este identică, avînd o utilizare mult mai largă. Textul inclus va fi
compilat ca parte componentă a programului, spre deosebire de unităţile Pascal
care sînt deja compilate. Nu se poate spune că există echivalenţă între cele două
tehnici, dar rolul lor final este acelaşi.

Exemplu: pentru a putea utiliza funcţiile de bibliotecă de intrare/ieşire trebuie


inclus fişierul stdio.h.
#include<stdio.h>

• Directiva #define este folosită pentru a substitui secvenţe de caractere.


Forma ei generală este:
#define sir1 sir2

unde atît sir1, cît şi sir2 sînt şiruri de caractere. La preprocesare, se şterge din
program această directivă şi, în tot programul, se înlocuieşte secvenţa de caractere
sir1 cu secvenţa de caractere sir2. Secvenţa sir1 este numită nume, iar sir2 este
numită descriere. Nu se face înlocuirea dacă sir1 apare în interiorul unui literal şir
de caractere sau în interiorul unui comentariu. sir2 poate să fie descris pe mai
multe rînduri, dacă la sfîrşitul fiecărui rînd (în afară de ultimul) se scrie caracterul \
(backslash). Rolul acestuia va fi discutat în alt capitol. sir2 poate să conţină şiruri
de caractere pentru care au fost definite descrieri anterior. Acestea vor fi substituite
conform definiţiilor lor.
Ştiinţa învăţării unui limbaj de programare. Teorie

Substituirea poate fi dezactivată din punctul în care apare directiva #undef


pînă la sfîrşitul programului sau pînă la redefinirea lui sir1. Directiva are forma
generală:
#undef sir1

Între cele mai frecvente utilizări ale directivei #define se află: definirea de
constante simbolice şi definirea de macro-uri (macrodefiniţii) – pentru
simplificarea scrierii.

Exemple: #define N 10
#define M 10
#define MAX (M+N)
#define DIM(a,b) (a)*(b)
char v[N],v1[10+DIM(5+M,6)];
char v1[10*MAX];
char m[M][N];
După preprocesare secvenţa de cod va deveni:
char v[10],v1[10+(5+10)*(6)];
char v1[10*(10+10)];
char m[10][10];

Se observă că la preprocesare nu se efectuează nici un calcul, doar substituiri de


text. Preprocesorul nu „înţelege” textul pe care îl manipulează.

În exemplele de mai sus, M şi N sînt constante simbolice (concept prezent


şi în Pascal (A)), în timp ce MAX şi DIM sînt macrodefiniţii (concept inexistent în
Pascal (D)).
Macrodefiniţia este un nume simbolic asociat unei secvenţe fixe sau
variabile (cu o parte fixă şi una variabilă) de text sursă. Secvenţei i se poate asocia
şi o listă de parametri, caz în care are o parte variabilă. Macrodefiniţiile sînt
folosite pentru a uşura scrierea textului sursă. Ele sînt nume acordate unor secvenţe
care se repetă frecvent, identic sau cu mici variaţii.
Din punct de vedere al textului sursă, un macro se foloseşte la fel ca orice
funcţie: se apelează prin numele simbolic urmat de lista parametrilor reali, pusă
între paranteze. Din punct de vedere al compilării, există o diferenţă fundamentală:
macro-urile sînt tratate la precompilare. Precompilatorul şterge din textul sursă
apelul macro-ului şi îl înlocuieşte chiar cu secvenţa respectivă. Parametrii formali
ai macro-ului sînt înlocuiţi cu parametrii reali, prin substituire de text
(corespondenţa se face conform regulilor de punere în corespondenţă a
parametrilor reali cu cei formali: unu-la-unu, de la stînga la dreapta). Se observă
folosirea parantezelor în definirea macrodefiniţiei pentru a evita problemele legate
de ordinea de precedenţă a operatorilor, care pot să apară la substituire. În general
se recomandă ca entităţile care participă la substituire să fie cuprinse între
paranteze.
Operaţia de substituire a numelui macrodefiniţiei cu descrierea sa se
numeşte expandarea macrodefiniţiei.

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