4 bytes(int,unsigned int,long,unsigned long,float) si 8 bytes(double si
long double).
Eventual,atunci cand declarati o structura complexa,puteti desena pe o
hartie cu patratele aspectul final al hartii de memorie alocata (cate un
patratel pentru fiecare byte),pentru a calcula compatibilitatea cu tipul
de procesor utilizat pentru procesarea informatiei.
-30-
Exemplu:-presupunand ca doriti sa dirijati o serie de calcule spre memoria
SIMM(secundara),pentru a utiliza procesorul principal pentru alte operatii
simultane.Daca memoria d-voastra SIMM este formata din procesoare " de 4
biti"(adica procesoare care pot rula simultan cate 4 bytes),atunci nu
ve-ti putea utiliza variabile declarate ca double sau long,deoarece nu
puteti procesa cate 8 bytes simultan.Acelasi calcul,trebuie facut si
pentru procesorul principal,in caz ca doriti sa efectuati in paralele mai
multe calcule simultane.
Din acest motiv,in etapele initiale ale dezvoltarii limbajului C,apli-
catiile se scriau dedicate unui anumit tip de procesor,sau unei anumite
configuratii de hardware a calculatorului.In etapa actuala,toate calcu-
latoarele de birou comerciale,pot executa operatii complexe ce depasesc
de obicei posibilitatile de conceptie ale programatorului,iar acest gen
de restrictii nu se mai aplica.
Declaratiile pot fi incomplete.Aceasta situatie apare atunci cand o
structura sau o uniune a fost declarata fara membri,sau o arie a fost
declarata fara dimensiune.
EXEMPLE: struct student *ps
char a[ ]
Declaratiile pot fi completate ulterior utilizand acelasi identificator:
struct student
{
int num;
}
sau respectiv:
char a[20];
Pentru a declara tipuri noi de date,sau pentru a utiliza un nume mai
scurt pentru tipurile predefinite,se pot utiliza declaratiile typedef.
In acest caz,declaratorul devine untip nou de date.
EXEMPLU: typedef long double NUMERE[10];
in continuare se vor putea utiliza constructii de genul : const NUMERE
sau volatile NUMERE etc. INSTRUCTIUNI In limbajul C,instructiunile determina modul de executie a programului
(cursivitatea).Ca si in alte limbaje,instructiunile permit formarea de
bucle de repetitie(cicli) sau transferul spre alte instructiuni de exe-
cutie.Principalele instructiuni sunt: break,compuse,continue,do-while,
expression,for,goto,if,null,return,switch,try-except,try-finally si while. Instructiunea break:-termina executia pentru bucla do,for,switch sau
while in care este inclusa si trece controlul la linia urmatoare de cod.
(vezi cuvantul cheie)
Instructiunile compuse:-denumite si blocuri de instructiuni,apar de obicei
incluse intr-o alta instructiune(de exemplu in IF) si executa un sir de
instructiuni succesive(declansate de o anumita conditie).
Daca nu se specifica explicit altfel,atunci toate instructiunile dintr-o
instructiune compusa vor fi considerate de tip auto.Daca o functie este
declarata "extern",nu va putea fi initializata cu valori.Cele de tip
static vor mentine aceeasi valoare la fiecare executie a instructiunii.
-31-
EXEMPLU: if ( i>0 )
{
line[i]=x;
x++;
i--;
}
Instructiunea continue:-transfera controlul la urmatorul pas al unei bucle
de repetitie ingorand comenzile ce urmeaza dupa continue.Cea mai frecventa
utilizare este in cadrul buclelor do,for si while.pentru a determina
continuarea buclei de repetitie fara a mai evalua expresiile ce urmeaza
dupa continue.
EXEMPLU: while ( i-->0 )
{
x= f(i);
if (x==1)
continue;
y+=x*x;
} Instructiunea do-while:-permite repetarea unei comenzi sau a unui grup de
comenzi si instructiuni,pana cand evaluarea expresiei din conditie va
returna valoarea "false".
EXEMPLU: do
{
y=f(x);
x--;
} while (x>0);
in exemplu,y va lua valoarea functiei f(x) iar x va fi decrementat cu
cate o unitate,la fiecare ciclu,atat timp cat x este mai mare decat zero. Instructiunea de tip expresie:-declara o anumita expresie sau operatie. Expresia va fi evaluate si executata in ordinea precedentei operatorilor.
Declaratia care nu contine nici o expresie,poarta numele de declaratie
nula.Fiecare expresie va fi evaluata exhaustiv,inainte de a trece la
expresia urmatoare.
EXEMPLE: x=(y+3) sau x++; sau proc( arg1,arg2); Instructiunea for:-permite repetarea unui ciclu de comenzi,operatii sau
instructiuni,de un anumit numar de ori.Instructiunea for poate fi intre-
rupta prin break,goto sau return.
Sintaxa generala a instructiunii for este:
for( expresia de initializare;expresia conditionala;expresia de bucla)
Executia se va face dupa cum urmeaza:
-se evalueaza expresia de initializare,apoi cea conditionala rezultand
trei variante:1.conditia este adevarata(true) caz in care se evalueaza
expresia de bucla si apoi se executa bucla de comenzi
2.expresia conditionala este omisa,caz in care se considera
implicit ca este adevarata si se trateaza ca si mai sus
3.conditia este evaluata a fi neadevarata(false),caz in
care se intrerupe bucla si controlul trece la urmatoarea linie din program
-32-
EXEMPLU: for( i=space=tab=0; i
{
if (line[i]==' ')
space++;
if (line[i]=='\t')
{
tab++ ;
line[i]=' ';
}
}
instructiunea din exemplu inlocuieste spatiile TAB cu spatii goale,
(comprima spatiile goale) atat timp cat i este mai mic decat MAX.
Dupa fiecare executie,i este incrementat cu o unitate pana cand
ajunge la valoarea maxima(MAX).
Fata de instructiunea FOR din alte limbaje de programare,se observa
faptul ca limbajul C permite si introducerea unei conditii de
executie a ciclului de instructiuni(flexibilitate mult mai mare). Instructiunea goto:-transfera controlul la un identificator care trebuie
sa fie inclus in aceeasi functie si are nume unic in cadrul functiei.
Se utilizeaza mai ales pentru a determina iesirea dintr-o bucla intricata,
deoarece break nu executa decat un singur salt.In celelalte situatii,se
va prefera break,deoarece este mai usor de executat.
EXEMPLU: void main()
{
int i,j;
for (i=0; i<10;i++)
{
for (j=0;j<3;j++)
{
if (i==5)
goto stop;
}
}
stop:printf("iesire din bucla: ",i);
}
in exemplu,goto determina iesirea din primele doua bucle,in momentul
in care i ajunge la valoarea 5 si afisarea mesajului. Instructiunea if:-permite introducerea unui set de conditii.Se pot utiliza
izolat sau in blocuri conditionale care formeaza adevarate filtre pentru
datele de acelasi tip sau de tip diferit.Instructiunile se vor executa
atat timp cat evaluarea conditiei returneaza o valoare diferita de zero.
Sintaxa permite doua formulari:
if (expresia conditionala) instructiunea
if (expresia conditionala) instructiunea else instructiunea
In cea de a doua varianta,else introduce modul de continuare a programului
in cazul in care conditia este evaluata a fi false(este zero).
Executia instructiunii poate fi intrerupta prin break,continue sau goto.
EXEMPLU: if (i>0)
y=x/i
-33-
Instructiunea nula(null):-se utilizeaza atunci cand doriti sa rezervati
un loc in program,pentru o instructiune ce va fi editata ulterior(pentru
moment este inoperanta).In acest scop se utilizeaza un punct-virgula (;).
Se poate utiliza si pentru a pastra locuri libere intr-un filtru de
instructiuni conditionale,pentru situatii viitoare ce vor necesita o
instructiune separata de ordonare a datelor.
EXEMPLU: if x<0;
x++;
if x<20;
x=x+7;
;
;
instructiunile nule rezerva cate o linie de program Instructiunea return:- determina terminarea executiei unei functii si
trece controlul la functia apelanta,la punctul ce urmeaza celui din care
s-a initiat apelarea functiei(determina continuarea programului).
Eventual,return poate returna o valoare functiei apelante.
EXEMPLU: int numar()
{
y=sq( x);
if y<3;
return("y este mai mic decat trei")
} Instructiunea switch:-impreuna cu case se utilizeaza pentru a organiza un
grup de instructiuni conditionale prin care controlul va fi transferat
uneia dintre ramificatiile instructiunii in functie de rezultatul evalu0
arii expresiilor conditionale.Este o instructiune conditionala,complexa
cu variante multiple.
Sintaxa generala este: switch (expresion) instructiune
case expresie constanta: instructiune
...-''- -''- -''- ...
...
default: instructiune
Controlul va fi la instructiunea case pentru care expresia constanta este
identica cu cea din "expresion" din instructiunea switch.
Dupa cum este si numele,este un fel de instructiune comutator.
EXEMPLU: switch( i )
{
case -1;
x++;
case 0;
y++;
case 1;
z++;
}
in functie de valoarea lui i,incrementeaza una dintre variabilele x,y,z
Pentru compilatoarele ANSI C,numarul maxim de situatii implementate prin
case,intr-o singura functie este de 257.Pentru compilatorul Microsoft C,
numarul lor este nelimitat(limitat doar de spatiul de memorie).
-34-
Instructiunea try-except:-este o extensie a limbajului C(in versiunea
Microsoft) ce permite aplicatiilor sa recastige controlul executiei si
atunci cand intervin evenimente care in mod normal ar intrerupe executia
programului.Acest gen de evenimente se numesc exceptii,iar modul de so-
lutionare a lor se numeste "mod de tratare a erorilor(exceptiilor)".
Exceptiile pot fi determinate fie de hardware,fie de software.Chiar daca
aplicatia nu poate continua dupa o astfel de exceptie,cel putin se va
afisa un mesaj care va permite identificarea cauzei care a intrerupt