|
Alfabetul limbajului este format din acele simboluri utilizate la reprezentarea entitatilor unui program, adica a unitarilor lexicale. Reamintim ca, prin unitati lexicale intelegem cele mai mici entitati cu valoare semantica (adica au o semnificatie), prin combinarea carora rezulta constructiile sintactice ('propozitii si fraze').
Alfabetul limbajului C se compune din urmatoarele categorii de simboluri:
Literele mari si mici ale alfabetului englez si caracterul de subliniere '_' (underscore)
Cifrele arabe: 0-9
Semne de punctuatie: ; , ' '
Alte caractere:
~, ^, <, >, =, ?, !, #, &,
Literele si cifrele, precum si caracterul underscore, de multe ori asimilat in multimea literelor, sunt utilizate pentru construirea identificatorilor si cuvintelor cheie, dupa reguli ce vor fi descrise in paragrafele corespunzatoare. In limbajul C se face diferenta dintre literele mici si majusculele corespunzatoare, deci identificatorul 'a' va fi diferit de identificatorul 'A', iar "turbo" va fi diferit de "TURBO" sau "TuRbO" sau orice alta combinatie majuscula minuscula.
Identificatorul reprezinta nume pe care le atribuim variabilelor, constantelor, functiilor, tipurilor de date definite de utilizator. Un identificator este o secventa de litere, cifre si caracterul underscore, primul caracter trebuind sa fie litera sau underscore. Folositi cu multa precautie identificatori care incep cu underscore, pentru a nu intra in conflict cu numele rutinelor sistem, a caror ortografiere nu se cunoaste (numele rutinelor sistem incep intotdeauna cu '_').
Regulile de formare a identificatorilor sunt aceleasi cu regulile din Pascal. Un identificator poate avea, teoretic, o lungime arbitrara, dar numai primele 31 de caractere sunt luate in considerare de compilator.
Identificatorii urmatori:
nume, Nume, NuME, NUMe
sunt diferiti, deoarece literele mici sunt considerate diferite de literele mari corespunzatoare.
Numele rezervate instructiunilor, tipurilor predefinite si sintaxei de definire a functiilor si tipurilor de date se numesc cuvinte cheie. Lista cuvintelor cheie ale limbajului C este:
auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while
Identificatorii definiti de utilizator nu trebuie sa coincida cu cuvintele rezervate. In limbajul C++ se mai adauga cateva cuvinte cheie, care vor fi descrise la momentul oportun (in capitolul rezervat programarii orientate obiect).
Comentariile sunt acele siruri de caractere utilizate la explicarea programelor sursa, delimitate prin caractere speciale care determina ignorarea lor de catre compilator.
Un comentariu are urmatoarea forma:
/* sir de caractere */
sau
// sir de caractere
unde prin sir de caractere se intelege o secventa de caractere din setul caracterelor reprezentabile, mai putin combinatia */. Nu se admit comentariile imbricate. Comentariul poate fi scris pe mai multe linii daca este scris in prima forma. A doua forma este specifica Borland C si permite scrierea unor comentarii ce nu depasesc o linie.
Definitia notiunii de tip de data cuprinde, pe langa multimea de valori a tipului, si alte aspecte:
dimensiunea memoriei alocate
multimea operatiilor ce actioneaza asupra elementelor tipului
timpul de viata asociat datei, dat de clasa de memorie
Tipurile de date sunt:
tipuri de baza: tipuri predefinite in limbaj;
caracter (char)
intreg (int)
real (float, double)
tipuri derivate: tipuri definite de utilizator;
enumerare
referinta
structurate:
tablou
structura
uniune
Spre deosebire de Pascal, in C nu este definit tipul logic, considerandu-se ca o expresie este adevarata daca are o valoare ne nula (adica diferita de 0) si falsa in caz contrar. Tipul char difera de tipul caracter din Pascal, in C caracterele fiind de fapt numere intregi, care desemneaza o echivalenta cu codul ASCII. Se defineste si tipul void, care desemneaza fie 'orice tip', fie indica lipsa oricarui parametru intr-o functie.
Tipurile de baza definite in limbajul C sunt: intreg, real si caracter. Exista insa mai multe tipuri intregi si reale, in functie de numarul de biti pe care se pot memora valorile si daca valorile sunt cu sau fara semn. In plus, unele dintre aceste tipuri difera de la o implementare la alta a limbajului (in functie de calculatorul pe care se lucreaza). In tabelul urmator sunt prezentate tipurile fundamentale, memoria necesara stocarii valorilor de acel tip si limita valorilor ce pot fi memorate intr-o variabila de acel tip.
Tipul
Dimensiune memorie
Limita valorilor
char
1 byte
-128.127
int
depinde de implementare (uzual 2 bytes)
-32768.32767
short int
2 bytes
-32768.32767
unsigned char
1 byte
0..255
unsigned int
depinde de implementare
long int
4 bytes
-2147483648 .2147483647
unsigned long int
4 bytes
0.4294967295
float
4 bytes
double
8 bytes
long double
10 bytes
Primul tip este tipul caracter. O variabila de acest tip va avea ca valoare codul ASCII asociat caracterului respectiv. De exemplu, daca unei variabile i se atribuie caracterul 'a', variabila va contine valoarea 97 (numarul de ordine al caracterului 'a' in codul ASCII).
Tipul intreg cel mai des utilizat in programe este int, dar numarul de bytes pe care se memoreaza valorile de acest tip difera de la o implementare la alta a limbajului C (in functie de tipul calculatorului). Astfel, tipul int este echivalent cu short int sau long int, in functie de implementare.
Celelalte tipuri intregi sunt obtinute prin folosirea prefixului signed sau unsigned, indicand daca valorile respective sunt cu semn (contin si valori negative), respectiv fara semn ( valori naturale).
Ultimele trei tipuri din tabel sunt tipuri reale, diferenta dintre ele constand in cantitatea de memorie utilizata, intervalul de valori si precizia memorarii valorilor (numarul de zecimale retinute). Valorile reale se reprezinta conform notatiei din standardul IEEE (folosind semnul, mantisa si exponentul). De exemplu, pentru tipul float se utilizeaza reprezentarea in simpla precizie, folosind un bit de semn, 7 biti pentru exponent si 24 de biti pentru mantisa. Aceasta reprezentare are un exponent in limita a 10-37 si 1038 cu pana la 7 zecimale precizie. Valoarea maxima a unui float este de 1.701411 E38.
Din tabel se observa ca nu exista un tip logic, asa cum este el definit in alte limbaje de programare. In limbajul Pascal, tipul logic e definit ca multimea cu valorile impreuna cu operatorii logici cunoscuti (si, sau , negatia logica). In limbajul C nu s-a definit acest tip dar se foloseste urmatoarea conventie: o expresie este considerata adevarata daca valoarea obtinuta la evaluarea ei este ne nula si falsa in caz contrar. Variabilele care se vor folosi ca variabile logice vor fi declarate de tip intreg.
O alta caracteristica aparte o constituie introducerea tipului void, pentru a desemna "nimic" sau "orice tip", in functie de contextul in care este utilizat. In exemplele de pana acum tipul void a fost folosit pentru a indica faptul ca functia main nu intoarce nici o valoare.
Pentru a putea utiliza o variabila intr-un program C, este obligatorie declararea acesteia, astfel:
[clasa_de_memorie] TIP_DE_DATE lista_variabile;
unde:
clasa_de_memorie specifica locul unde se va aloca memorie pentru variabila si durata sa de viata, notiuni la care vom reveni mai tarziu). Specificarea clasei de memorie este optionala;
TIP_DE_DATE este orice tip predefinit sau derivat;
lista_variabile contine lista variabilelor de acel tip, despartite prin virgula;
Exemple:
int a,b,c;
char ch;
float x,y;
long int z;
int g=7;
Observatie: La declararea variabilei intregi g s-a realizat si initializarea acesteia ( adica stabilirea unei valori initiale).
Variabilele care sunt declarate in interiorul corpului unei functii se numesc variabile locale, iar cele declarate in afara oricarei functii din program se numesc variabile globale. Variabilele globale vor putea fi utilizate in toate functiile ce compun programul, iar variabilele locale doar in cadrul functiei in care au fost definite.