Capitolul 3.9. Goto-uri si etichete
:: Programare :: C & C++ :: Capitolul 3
Pagina 1 din 1
Capitolul 3.9. Goto-uri si etichete
Limbajul C ofera instructiunea - de care se poate abuza oricit - goto si etichete pentru ramificare. Formal, goto nu este necesara niciodata si in practica este aproape intodeauna usor sa scriem cod fara ea. Noi nu am folosit goto in aceasta carte. Cu toate acestea, va sugeram citeva situatii in care goto isi poate gasi locul. Cea mai obisnuita folosire este aceea de a abandona prelucrarea in anumite structuri puternic imbricate, de exemplu de a iesi afara din doua bucle deodata. Instructiunea break nu poate fi folosita deoarece ea paraseste numai bucla cea mai din interior. Astfel:
for (...)
for (...) {
...
if (dezastru)
goto error;
}
...
error:
descurca beleaua
Aceasta organizare este manevrabila daca codul de minuire a erorii este netrivial si daca erorile pot apare in locuri diferite. O eticheta are aceeasi forma ca si un nume de variabila si este urmata de doua puncte. Ea poate fi atasata oricarei instructiuni dintr-o aceeasi functie ca si goto.
Ca un alt exemplu, sa consideram problema gasirii primului element negativ dintr-un tablou bidimensional. (Tablourile multi-dimensionale sint discutate in Capitolul 5). O posibilitate este:
for (i = 0; i < N; i++)
for (j = 0; j < M; j++)
if (v[i][j] < 0)
goto found;
/* nu s-a gasit */
...
found:
/* s-a gasit la pozitia i,j */
...
Codul implicind un goto poate fi scris intodeauna fara goto, chiar daca pretul pentru aceasta este o variabila suplimentara, sau teste repetate. De exemplu, cautarea in tablou devine:
found = 0;
for (i = 0; i < N && !found; i++)
for (j = 0; j < M && !found; j++)
found = v[i][j] < 0;
if (found)
/* a fost la i-1, j-1 */
...
else
/* nu a fost gasit */
...
Cu toate ca nu sintem dogmatici in privinta subiectului, se pare ca e adevarat ca instructiunea goto ar trebui folosita cu economie, daca nu chiar deloc.
for (...)
for (...) {
...
if (dezastru)
goto error;
}
...
error:
descurca beleaua
Aceasta organizare este manevrabila daca codul de minuire a erorii este netrivial si daca erorile pot apare in locuri diferite. O eticheta are aceeasi forma ca si un nume de variabila si este urmata de doua puncte. Ea poate fi atasata oricarei instructiuni dintr-o aceeasi functie ca si goto.
Ca un alt exemplu, sa consideram problema gasirii primului element negativ dintr-un tablou bidimensional. (Tablourile multi-dimensionale sint discutate in Capitolul 5). O posibilitate este:
for (i = 0; i < N; i++)
for (j = 0; j < M; j++)
if (v[i][j] < 0)
goto found;
/* nu s-a gasit */
...
found:
/* s-a gasit la pozitia i,j */
...
Codul implicind un goto poate fi scris intodeauna fara goto, chiar daca pretul pentru aceasta este o variabila suplimentara, sau teste repetate. De exemplu, cautarea in tablou devine:
found = 0;
for (i = 0; i < N && !found; i++)
for (j = 0; j < M && !found; j++)
found = v[i][j] < 0;
if (found)
/* a fost la i-1, j-1 */
...
else
/* nu a fost gasit */
...
Cu toate ca nu sintem dogmatici in privinta subiectului, se pare ca e adevarat ca instructiunea goto ar trebui folosita cu economie, daca nu chiar deloc.
Subiecte similare
» Capitolul 3.2.IF-ELSE
» Capitolul 3.3. ELSE-IF
» Capitolul 3.5. WHILE si FOR
» Capitolul 2.3. Constante
» Capitolul 3.7. Break
» Capitolul 3.3. ELSE-IF
» Capitolul 3.5. WHILE si FOR
» Capitolul 2.3. Constante
» Capitolul 3.7. Break
:: Programare :: C & C++ :: Capitolul 3
Pagina 1 din 1
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum
|
|