B (programovací jazyk)

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
B
Paradigma procedurální (imperativní), strukturovaný
Autor Ken Thompson a Dennis Ritchie
Typová kontrola jeden datový typ: slovo
Ovlivněn jazyky BCPL
Ovlivnil jazyky C

B je programovací jazyk odvozený od jazyka BCPL. Autory jsou Ken Thompson a Dennis Ritchie. Tento jazyk se později stal základem pro velmi populární jazyk C.

Popis jazyka[editovat | editovat zdroj]

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 | editovat zdroj]

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 | editovat zdroj]

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

Podmínka: if(r-hodnota(podmínka)) příkaz/blok else příkaz/blok. 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 | editovat zdroj]

Paměťové třídy[editovat | editovat zdroj]

Externí[editovat | editovat zdroj]

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 | editovat zdroj]

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, ....

Vektor[editovat | editovat zdroj]

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

Interní[editovat | editovat zdroj]

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 | editovat zdroj]

Jednoduchá[editovat | editovat zdroj]

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

Vektorová[editovat | editovat zdroj]

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 | editovat zdroj]

Syntaxe: název(parametry) blok.

Příklad:

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

Znaky[editovat | editovat zdroj]

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 | editovat zdroj]

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 | editovat zdroj]

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 | editovat zdroj]

Hello world:

main()
{
  extrn a, b, c;
  putchar(a);
  putchar(b);
  putchar(c);
  putchar('!*n');
}
a 'hell';
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 | editovat zdroj]