b4x22xn
Cu exceptiile ce vor fi indicate, enunturile se executa in secventa.
9. 1. Enunt expresie
Multe enunturi sint enunturi expresie, care au forma: expression;
In general enunturile expresie sint asignari sau apeluri de functie.
9. 2. Enuntul compus sau block
Se prevede enuntul compus intrucit se pot folosi mai multe enunturi acolo unde este asteptat doar unul: compound-statement;
Adeclaration-list opt statement-list optS declaration-list: declaration declaration, declaration-list statement-list statement statement statement-list
Daca unul din identificatorii din lista de declaratii a fost declarat anterior, declaratia externa este decazuta pentru durata unui bloc, dupa care isi epuizeaza forta.
Orice initializare de variabile auto sau register se realizeaza de fiecare data cind se intra in bloc la virful sau. Este posibil( dar este o practica rea ) de a face transferul in bloc; in acest caz nu se face initializarea.
Initializarea variabilelor static se face doar odata, la inceputul executiei programului. In bloc, declaratiile extern nu rezerva memorie astfel ca initializarea nu este permisa.
9. 3. Enunturi conditionale
Sint 2 forme de enunturi conditionale: if(expresie) statement if(expresie) statement else statement
In ambele cazuri se evalueaza expresia si daca nu sint zero se executa primul enunt. In al 2-lea caz se executa a 2-a instructie daca prima este egala cu zero. Ambiguitatea lui
"else" este rezolvata prin conectarea unui "else" cu ultimul
"else-less if" intilnit.
9. 4. Instructii while
Forma: while(expression)statement
Instructia din while este executat repetat atita timp cit valoarea expreie ramine diferita de zero. Testul se face inainte de executia instructiei.
9. 5. Instructia do
Are forma do statement while(expression);
Instructia este executata repetat pina cind valorea expresiei devine zero. Testul se face dupa fiecare executie a instructiei.
9. 6. Instructia for
Are forma: for(expression-1opt;expression-2opt;expression-3opt)statement
Este echivalenta cu: expression-1;
while(expression-2)A statement expression-3;
S
Deci prima expresie specifica initializarea buclei; a doua specifica un test, facut inaintea fiecarei iteratii, astfel ca din bucla se iese cind expresia devine zero; a 3-a expresie specifica o incrementare care este realizata dupa fiecare iteratie.
Oricare sau toate expresiile pot lipsi. Daca lipseste a doua instructie while implicata devine echivalenta cu while(1); celelalte expresii vor lipsi din constructia data.
9. 7. Instructia switch
Instructia switch face ca controlul sa fie transferat la una din mai multe instructii functie de valoarea expresiei. Are forma: switch(expression)statement
Se executa conversiile necesare, dar rezultatul trebuie sa fie int. Instructia este compusa. Orice instructie din bloc pate fi etichetata cu un prefix tip case case constant-expression unde expresia de constanta va fi un intreg(int). Este interzisa aparitia a doua constante pentru case in aceasi instructie switch cu aceeasi valoare. Constantele se definesc precis in
&4. 5.
Poate exista un prefix de instructie de forma default:
Cind se executa instructia switch, expresia se evalueaza si se compara cu constantele case. Daca una este egala cu valorea expresiei, controlul se va da la instructia urmind prefixul gasit.
Daca nu exista instructii cu case-ul cautat, dar exista prefixul defaault, controlul se da la instructia prefixata.
In lipsa prefixului default nu se executa nici una din instructiuni. case si default, in sine, nu altereaza mersul programului.
Iesirea din switch se face cu break (vezi &9. 8) In general instructia al carui subiect este switch este un bloc.
Declaratii pot apare la inceputul instructiei, dar initializarea variabilelor automatic si register sint inefective.
9. 8. Instructia break
Are forma: break; si face sa se termine ciclul cel mai intern
while, do, for sau switch. Controlul trece la instructia care urmeaza dupa instrucctia de terminare.
9. 9 Instructia continue
Are forma: continue; si face sa se treaca la continuarea in bucla a celui mai intern
while, do sau for; adica se sare la sfirsitul buclei. Mai precis, in fiecare din instructiile
while(...) doA for(...)A
... ... ... contin: ; contin: ; contin: ;
S Swhile(...); S
O instrcutie continue este echivalenta cu goto contin(Dupa contin: o instructie goala)
9. 10. Instructia return
O functie revine la apelant cu instructia return care are formele: return; return expression;
In primul caz valoarea returnata nu e definita. In al doilea caz valoarea expresiei este returnata apelantului. Daca se cere, expresia este cnvertita, ca la asignare, in timpul functiei in care apare. Ocolirea finalului unei functii este echivalenta cu nereturnarea de valoare la apelant.
9. 11. Instructia goto
Controlul se poate transfera neconditionat cu ajutorul instructiei: goto identifier;
Identificatorul trebuie sa fie o eticheta (vezi 9. 12) din functia curenta.
9. 12 Instructii etichetate
Oricare instructie poate fi precedata de un prefix eticheta de forma identifier: care serveste pentru declararea identificatorului ca si eticheta. Unica utilizare a etichetei este de tinta a unui goto. Bataia unei etichete este functia curenta, excluzind sub blocurile in care acelasi identificator poate fi redeclarat. Vezi
&11.
9. 13 Instructia nula
Are forma
;
Este folosita pentru ca poate purta o eticheta chiar inainte de
S(N. T. acolada finala) a unei instructii compuse sau servind ca si corp de instructii nul unei instructii de buclare gen while.