použil jste někdy někdo příkaz "goto" v jazyku C v programátorské praxi?
err = a_init();if (err) goto Exit;err = b_init();if (err) goto a;err = c_init();if (err) goto b;. . .goto Exit;. . .c: c_finit();b: b_finit();a: a_finit();Exit: return err;}
Obcas, krome uz zminenych pripadu se hodi na vyskakovani z vicenasobne vnorenych smycek. Nekdy dost hodne. Na tom je obcas pekne poznat nezkuseneho programatora, ktery vyrobi strasne slozity a nepochopitelny bazmek, kde na prvni pohled vubec neni poznat co byl zamer, protoze ve skole se dozvedel, ze goto je zlo a ted ma strach ho pouzit.
Citace: nula 19. 08. 2019, 07:46:56Obcas, krome uz zminenych pripadu se hodi na vyskakovani z vicenasobne vnorenych smycek. Nekdy dost hodne. Na tom je obcas pekne poznat nezkuseneho programatora, ktery vyrobi strasne slozity a nepochopitelny bazmek, kde na prvni pohled vubec neni poznat co byl zamer, protoze ve skole se dozvedel, ze goto je zlo a ted ma strach ho pouzit. Pouziti GOTO mi pripada jako "ted vyskoc z okna" ono to nejak dopadne. Misto: nech toho co delas, vyjdi dverma, zamkni a sejdi ze schodu dolu.
Pouziti GOTO mi pripada jako "ted vyskoc z okna" ono to nejak dopadne.
Citace: Zdeno Sekerák 19. 08. 2019, 08:56:31Citace: nula 19. 08. 2019, 07:46:56Obcas, krome uz zminenych pripadu se hodi na vyskakovani z vicenasobne vnorenych smycek. Nekdy dost hodne. Na tom je obcas pekne poznat nezkuseneho programatora, ktery vyrobi strasne slozity a nepochopitelny bazmek, kde na prvni pohled vubec neni poznat co byl zamer, protoze ve skole se dozvedel, ze goto je zlo a ted ma strach ho pouzit. Pouziti GOTO mi pripada jako "ted vyskoc z okna" ono to nejak dopadne. Misto: nech toho co delas, vyjdi dverma, zamkni a sejdi ze schodu dolu.To je poradny nesmysl, C++ (nevim jak C, ale predpokladam, ze to bude stejny), je presne definovano jak se to bude chovat. Je to normalni vyskoceni ze vsech zanorenych scope. Zadne vyskakovani z okna, je to primy vychod ven. Promin, ale ty jsi dalsi takovy pripad, o kterem jsem mluvil....
int i, j;for(i = 0; i < 10; ++i) { for(j = 0; j < 20; ++j) { if(j == 5) goto vylez_z_cyklu; }}vylez_z_cyklu: printf("j je rovno %d\n", j);
Kdyz tedy pouziji goto uvnitr nejakeho bloku kodu a vyskocim z tohoto bloku, povazuje prekladac zmineny blok kodu (ze ktereho jsem vyskocil) za ukonceny? Nebo ho nechava nejak otevreny? Viz tento priklad:Kód: [Vybrat]int i, j;for(i = 0; i < 10; ++i) { for(j = 0; j < 20; ++j) { if(j == 5) goto vylez_z_cyklu; }}vylez_z_cyklu: printf("j je rovno %d\n", j);