B (programovací jazyk)

programovací jazyk

B je programovací jazyk odvozený od jazyka BCPL. Autory jsou Ken Thompson a Dennis Ritchie. Jazyk B je předchůdcem velmi populárního jazyka C.

B
Paradigmaprocedurální (imperativní), strukturovaný
AutorKen Thompson a Dennis Ritchie
Typová kontrolabeztypovost
Ovlivněn jazykyBCPL
Ovlivnil jazykyC

Popis jazyka

editovat

Jazyk B byl vytvořen hlavně pro systémové programování. Programovalo se v něm jednodušeji než v Jazyce symbolických adres, ale kód byl skoro stejně efektivní. Ken Thompson odstranil některé prvky z BCPL, které mu připadaly zbytečné.

B má pouze jeden datový typ: slovo. Většina operátorů jako s ním pracují jako s celým číslem, ale některé ho interpretují jako adresu v paměti počítače. Jazyk B nepodporuje desetinná čísla. Komentáře začínají /* a končí */.

R-hodnoty a l-hodnoty

editovat

R-hodnota je konstantní hodnota, která nemůže stát na levé straně přiřazení. Je to například volání funkce nebo číselná konstanta. L-hodnota je hodnota, která se smí měnit, může tedy stát na levé i pravé straně přiřazení (může r-hodnotu kdykoli nahradit). Je to proměnná, nebo výsledek operátoru *. Operátoru * předáváme r-hodnotu, kterou interpretuje jako adresu v paměti a vrátí l-hodnotu: proměnnou na té adrese. Operátoru & naopak předáme l-hodnotu a on vrátí r-hodnotu: adresu té l-hodnoty.

Příkazy

editovat

Blok: { příkazy oddělené středníky }.

Podmínka: if(r-hodnota(podmínka)) příkaz/blok else příkaz/blok. Větev else je nepovinná.

Příkaz goto: goto r-hodnota(očekává se návěstí).

Příkaz switch:

switch(r-hodnota)
{
    case konstanta1:
        /*............*/
    case konstanta2:
        /*............*/
    default:
        /*............*/
}

Cyklus while: while(r-hodnota(podmínka)) příkaz/blok.

Příkaz break: break. Slouží k vyskočení z cyklu while.

Příkaz return: return r-hodnota(nepovinné). Ukončí funkci. Pokud se mu předá r-hodnota, bude to návratová hodnota té funkce.

R-hodnota ukončená středníkem je příkaz.

Pokud před středník nic nenapíšeme, je to prázdný příkaz. Nemá žádný efekt.

Deklarace proměnných

editovat

Paměťové třídy

editovat
Externí
editovat

Proměnná je alokována před spuštěním programu a je dostupná ve všech funkcích. Deklaruje se: extrn proměnná1, proměnná2, ....

Automatická
editovat

Proměnná je alokována v nějaké funkci a je dostupná jen v té funkci (než ta funkce skončí). Deklaruje se: auto proměnná1, proměnná2, ....

Podobný poli z C a jiných jazyků. Deklaruje se: auto jméno[konstanta]. Velikost vektoru bude konstanta+1.

Interní
editovat

Proměnná je alokována před spuštěním programu a je dostupná jen v jedné funkci. Deklaruje se tak, že se použije ve funkci proměnná, která ještě nebyla deklarována jako externí nebo automatická. Interní proměnné se používají hlavně pro návěstí.

Definice externí proměnné

editovat
Jednoduchá
editovat

Syntaxe: proměnná, nebo proměnná hodnota. První způsob proměnnou inicializuje na nulu, druhý proměnnou inicializuje na hodnotu hodnota.

Vektorová
editovat

Syntaxe: proměnná[konstanta] hodnota1, hodnota2, .... Inicializuje proměnnou na l-hodnotu: začátek externího vektoru. Vektor bude mít velikost jako vyšší z: konstanta+1 a velikost v inicializačního seznamu(hodnota1, hodnota2, ...). Pokud není zadána konstanta, je to totéž, jako když se zadá nula. Pokud má inicializační seznam menší velikost než konstanta+1, budou některé prvky vektoru neinicializované (budou mít nedefinovanou hodnotu).

Definice funkce

editovat

Syntaxe: název(parametry) blok.

Příklad:

min(a, b) /*Funkce vrátí menší číslo*/
{
    if(a<b)
    {
        return a;
    }
    else
    {
        return b;
    }
}

Jsou uzavřeny v jednoduchých uvozovkách. V jedné proměnné lze uchovávat až 4 znaky.

Příklad:

auto a;
a='Ahoj';

Textové řetězce

editovat

Jsou uzavřeny v uvozovkách. Textový řetězec je základ vektoru znaků (v jednom prvku vektoru jsou 4). Jsou ukončeny znakem s escape sekvencí *e.

Escape sekvence:

Znak Význam
*0 null
*e konec souboru nebo řetězce
(* {
*) }
*t tabulátor
** *
*' '
*" *"
*n nový řádek

Vstup a výstup

editovat

Funkce getchar načte vrátí jeden načtený znak. Funkce putchar vypíše znak, který je jí předán a vrátí ho. Funkce getstr načte do řetězce, který je jí předán celý řádek a vrátí ho. Funkce putstr vypíše řetězec, který jí předán.

Funkce printf přebírá 1 až 11 parametrů. První parametr je formátovací řetězec. Formátovací řetězec se vypíše, ale některé dvojice znaků se nahradí dalšími parametry funkce.

Dvojznak Nahrazení
%c znak
%d číslo
%o číslo v osmičkové soustavě
%s řetězec
%% %

Ukázka kódu

editovat

Hello world:

main()
{
  extrn a, b, c; /* Externí proměnné */
  putchar(a); /* "hell" */
  putchar(b); /* "o, w" */
  putchar(c); /* "orld" */
  putchar('!*n'); /* "!" a konec řádku */
}
a 'hell'; /* Definice externích proměnných */
b 'o, w';
c 'orld';

Jednoduché počítání:

main() /*Tento program vypíše součet a+b*/
{
  auto a, b, soucet; /* Vytvoření proměnných */
  a = 1;
  b = 2;
  soucet = a+b; /* Součet */
  putnumb(sum); /* Výpis */
}

Externí odkazy

editovat