A B programozási nyelv

Alprogramok


A B nyelvben az eljárások és a függvények definiálása hasonló módon történik. A kettõ közötti formai különbség csupán annyi, hogy a függvényeknél a visszatérési értéket a return után megadjuk, míg az eljárásoknál nem adunk meg visszatérési értéket. A deklarálás szintaxisa :
alprogramnev (parameterlista) ut;
Az alprogram neve nem számjeggyel kezdõdõ, betûvel, számmal vagy _-jellel folyatódó karaktersorozat lehet. A paraméterek megadásánál változóneveket kell felsorolni típusmegadás nélkül, elválasztó vesszõkkel felsorolva. Az alprogram hatását ut; (általában szekvencia) utasítás határozza meg. Az eljárásokból visszatérni a return; utasítással lehet. Függvények esetében a visszatérési értéket return (ertek); formában kell megadni.

Példa két elem mínimumát megadó függvényre (a típusnélküliség minden szépségét kihasználva) :
min (a, b) { if (a > b) return (a) else return (b); }
  • Speciális a main () függvény, melyet minden B programnak tartalmaznia kell. A program indítása után a vezérlést ez a függvény kapja meg.
  • Rekurzió: természetesen van lehetõség rekurzív függvény hívásokra, egy példa rá:
    putnumb(n) { auto a; if (a=n/10) putnumb(a); /* a rekurzió */ putchar(n % 10 + ’0’); }
  • Paraméter átadás

    Megegyezik a C nyelvben megszokottakkal: érték szerinti paraméterátadás esetén az aktuális paraméterek értékei nem változnak, míg cím szerinti paraméterátadáskor nem készül másolat az aktuális paraméterekrõl, hanem az alprogram azokkal ”dolgozik”. Mivel a változóknak nem adjuk meg a típusát deklarálásukkor (a típus a programkörnyezetbõl derül ki), ezért ezt alprogram definiáláskor sem tesszük meg.
    Példa érték szerinti paraméterátadásra:

    Swap(x,y){ auto temp; temp = x; x = y; y = temp; }
    Ilyenkor az aktuális x és y értéke nem változik. Példa cím szerinti paraméterátadásra:
    Swap(&x, &y) { auto temp; temp = *y; *x = *y; *y = temp;
    Ilyenkor az aktuális x és y értékek tényleg kicserélõdnek.