Hirdetés

Új hozzászólás Aktív témák

  • pmonitor
    aktív tag

    Igazából azt sem tudom min vitatkozol...
    Csak annyit írtam (viccesen), hogy ha a continue-t tiltják, akkor miért nem tiltják a break-et is... amúgy implementálva mind-mind goto (ráadásul az is előrefelé, nem hátra - pl for (int i=k; i>l; i+=m).

    // értékadás
    int ix = k;
    :loop_start
    //kilépési feltétel
    if n>l goto outside_of_loop;
    /*
    utasítások
    */
    // continue
    if condition_continue goto loop_increment;
    /*
    még utasítások
    */
    // break
    if condition_break goto outside_of_loop;
    /*
    még utasítások
    */
    :loop_increment
    i += m;
    goto loop_start;
    :outside_of_loop

    Nem az implementációról beszéltem. Nem tudsz olyan kódot írni, hogy az implementációban break(vagy continue) legyen. Ott valóban minden goto(és ha tovább megyünk a kész kódra, akkor jmp) lesz. Arról a forráskódról beszéltem, amit a user ír. A példádban erről:
    for (int i=k; i>l; i+=m)

    Itt a continue visszafelé lép a törzsből az "i+=m"-re. Míg a break csak előre lép, a törzs utáni helyre. break-el nem tudsz visszafelé lépni. A goto-val meg össze-vissza tudsz lépkedni(akár hátrafelé is ki tudsz lépni a ciklusból(aztán vagy újra belelépsz, vagy akkor már kihagyhatod a ciklust is). Pl.:
    cimke_1:
    //utasítások
    for (int i=k; i>l; i+=m) {
    //utsítások
    goto cimke_1;
    }

    Ilyent a break-el nem tudsz csinálni. Az, hogy az implementációban mi van, az más kérdés.

    Szerk:
    A break esetén megvalósul a szekvencia - iteráció elv. Szekvenciálisan mennek az utasítások, amíg egy ciklushoz nem érsz. A ciklus más dimenzió, mint a szekvencia. Viszont a break tartja a szekvenciát(hiszen előre ugrik. Tehát az iteráció előtt és mögött is megmarad a szekvencia. Persze közben lehet szelekció bárhol, de a példámat nem akartam annyira bonyolítani.

Új hozzászólás Aktív témák