B (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.
Paradigma | procedurální (imperativní), strukturovaný |
---|---|
Autor | Ken Thompson a Dennis Ritchie |
Typová kontrola | beztypovost |
Ovlivněn jazyky | BCPL |
Ovlivnil jazyky | C |
Popis jazyka
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
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
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.
Externí
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á
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
Podobný poli z C a jiných jazyků. Deklaruje se: auto jméno[konstanta]
. Velikost vektoru bude konstanta+1
.
Interní
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í.
Jednoduchá
Syntaxe: proměnná
, nebo proměnná hodnota
. První způsob proměnnou inicializuje na nulu, druhý proměnnou inicializuje na hodnotu hodnota
.
Vektorová
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
Syntaxe: název(parametry) blok
.
Příklad:
min(a, b) /*Funkce vrátí menší číslo*/
{
if(a<b)
{
return a;
}
else
{
return b;
}
}
Znaky
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
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
.
Znak | Význam |
---|---|
*0 | null |
*e | konec souboru nebo řetězce |
(* | { |
*) | } |
*t | tabulátor |
** | * |
*' | ' |
*" | *" |
*n | nový řádek |
Vstup a výstup
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
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 */
}