next up previous contents
Elõre: Struktúrák és unionok Fel: Utasítások Vissza: Ciklusszervezõ utasítások

Egyéb vezérlésátadó utasítások

A switch típusú elágaztatás a vezérlést több lehetséges utasítás valamelyikére adja át egy kifejezés értékétõl függõen. Alakja:

       switch (kifejezés) blokk

A kifejezés kiértékelésekor a szokásos aritmetikai konverziók megtörténnek, a kapott típusnak int-nek kell lenni. A blokkon belül bármely utasítás rendelkezhet a következõ formátumú címkével (akár többel is):

        case állandó_kifejezés:

Az állandó_kifejezés fordítási idõben kiértékelhetõ kifejezést jelent, azaz nem függhet egyetlen változó értékétõl sem. Nem használható két egyforma értékû case címke. A switch utasítás végrehajtása a kifejezés kiértékelésével kezdõdik, majd az így nyert érték összehasonlításra kerül az összes case állandóval. Ha valamelyikkel megegyezik, akkor a vezérlés az adott case címkét követõ utasításra adódik. Ha a kifejezés egyik case konstanssal sem egyezik meg, akkor a vezérlés a default: címkéjû utasításra adódik, ha ilyen létezik; ellenkezõ esetben a blokk egyetlen utasítása sem lesz végrehajtva. A blokk általában nem tartalmaz deklarációs illetve definíciós részt, ha mégis, akkor a definíciókban esetleg szereplõ kezdõértékadások hatástalanok lesznek.

A break; utasítás befejezi az õt körülvevõ legbelsõ while, do, for, vagy switch utasítás végrehajtását, és a vezérlés az így befejezett utasítás mögé kerül. A következõ példa felhasználja a korábban definiált enum nap típusú ma változót:

            switch (ma)
            {
                case hetfo:
                              amit hétfõ esetén csinálni kell
                              break;
                case kedd:
                case szerda:
                              keddi, vagy szerdai teendõk
                              break;
                case szombat:
                              amit szombaton kell tenni
                              /* nincs break! */
                case vasarnap:
                              ami szombati vagy vasárnapi dolog
                                    
                              break;
                default:
                              amit egyébként csinálni kell
                              break;
            } /* endswitch */
Figyeljük meg, hogy az egyes esetekhez tartozó utasításokat a következõ case címke önmagában nem zárja le (egy címke a vezérlést nem változtathatja meg, csak célpont lehet egy vezérlésátadásnál), a tényleges lezárást a break; utasítással érhetjük el. Ki is használhatjuk ezt a tulajdonságot, mint a példánkban ezt szombat esetén tettük: a megfelelõ esethez tartozó utasítások végrehajtása után "rácsorogtunk" a következõ esetre. Természetesen az ilyen, nem nyilvánvaló megoldásokat feltûnõen illik jelölni.

A continue; utasítás szolgál arra, hogy egy ciklus törzsének végrehajtását félbeszakítsa, és a vezérlést az adott ciklus fejére adja vissza (ez while-nál és do-nál a feltételvizsgálat, for-nál a léptetés). A goto utasítás a vezérlést a megnevezett címke utáni utasításra adja.

Egy függvény a hívójához a return utasítás segítségével térhet vissza. Az utasításnak kétféle alakja van:

        return;
vagy

        return kifejezés;

Az elsõ formát a void típusú függvényeknél használjuk; a második forma esetén a függvény visszatérési értékét a kifejezés határozza meg. Szükség esetén az értékadó operátorhoz hasonló módon konvertálódik a kifejezés a függvény visszatérési típusára, de nem lesz int-nél rövidebb egész illetve double-nál rövidebb lebegõpontos típusú (ezért célszerû int-nek deklarálni a függvények visszatérési értékét char vagy short helyett). Megjegyezzük, hogy a függvény törzsét alkotó blokk végét jelzõ }-en való áthaladás egyenértékû a return; utasítás végrehajtásával.


next up previous contents
Elõre: Struktúrák és unionok Fel: Utasítások Vissza: Ciklusszervezõ utasítások