1.1. Historický úvod
a normy jazyka
1.2. První program v jazyce C
1.3. Jednoduchý vstup a výstup
Programovací jazyk C je všeobecně použitelný programovací jazyk známý svou efektivitou, ekonomií a přenositelností. Tato charakteristika jej předurčuje pro prakticky všechny oblasti programování. Obzvláště užitečným je C v systémovém programování, protože umožňuje psaní rychlých, kompaktních programů, které jsou snadno adaptovatelné pro jiné systémy. Dobře napsaný C program je často stejně rychlý, jako program napsaný v assembleru. Navíc je ovšem čitelnější a snadněji udržovatelný.
C je pružný jazyk, který ponechává řadu programátorských rozhodnutí na nás. C nám vnucuje v podstatě jen některá omezení, například konverzi typů. C nám tedy umožňuje snadno vytvářet programy. Abychom ovšem správně věděli, jak se program bude chovat, musíme C dobře poznat. K tomu nám může posloužit předkládané skriptum.
Jazyk C byl navržen jako poměrně malý jazyk, kombinující
efektivitu a výkonnost. C v sobě neobsahuje funkce pro provádění
vstupu a výstupu, alokaci paměti, práci s obrazovkou a řízení
procesů. Pro tyto funkce sahá programátor do systémových
knihoven. Díky tomu se můžeme rozhodnout, použijeme-li funkce
ze standardních knihoven, nebo napíšeme variantu speciálně
pro naše potřeby. Tento návrh pomáhá oddělit vlastnosti
jazyka od vlastností spojených s konkrétním procesorem,
architekturou, ... . V C tak můžeme snadněji psát
přenositelné programy.
Jazyk C vytvořil v Bellových laboratořích AT&T Denis Ritchie. Záměrem bylo napsat jazyk pro snadnou a přenositelnou implementaci Unixu. Na tomto přenosu (Unixu již existujícího pro PDP-7) se dále podíleli Brian Kernighan a Ken Thompson. Všichni tři tedy "byli u toho".
Jazyk C vznikl jako systémový jazyk pro systémové programátory. Po řadu let byla faktickou normou jazyka byla bible C - kniha Programovací jazyk C autorů K&R. V tomto C bylo možno provádět nejrůznější finty, které ovšem činily zdrojový text značně nečitelným. Nicméně s postupem času se s C a Unixem seznamovali studenti na vysokých školách, odcházeli do praxe a začali používat C i v jiných než systémových oblastech. Uživatelé přirozeně požadovali, aby C bylo nejen mocným prostředkem (tím bylo od svého vzniku), ale i bezpečným a přehledným jazykem. Postupně se upouštělo od fint1. Rovněž vznikl trend vedoucí k normalizaci jazyka. Teprve pak se totiž může jazyk opravdu všeobecně rozšířit.
ANSI2 norma jazyka C definuje moderní vyšší programovací jazyk všeobecného použití. Shodný standard definuje ISO3. Proto se někdy uvádí toto spojení jako ANSI/ISO norma. ANSI jazyk C je bezpečnější. Navíc často umožňuje (byť jako archaismy) převzetí zdrojových textů vyvořených ve stylu K&R. Překladače, díky normalizaci jazyka, nabízí řada nezávislých producentů programového vybavení. Podstatné je, že C nabízí prakticky na všech technických platformách. Budeme-li ANSI normu C dodržovat, máme velkou šanci, že budeme schopni přenést zdrojový text na jiný stroj (s jiným procesorem i OS), program přeložit, spojit s knihovnami a spustit. Rozhodně by neměly vyvstat neřešitelné problémy.
ANSI C je navrženo tak, že kodifikuje existující praktiky. Většina zdrojových textů, napsaných před vydáním normy, je novými překladači akceptována. Přesto je ANSI C novým jazykem:
S postupem doby se nezastavila ani teorie programování.
Jestliže C umožňuje psát programy modulárně, dnešní trend vyžaduje
i podporu objektového přístupu. V roce 1986 publikoval
Stroustrup knihu The C++ Programming Language. Počátkem
90. let pak byl i tento jazyk normalizován. Jedná se o objektové
rozšíření jazyka C. Proto čas, který C věnujeme, v případě
dalšího zájmu o C++ bohatě zúročíme.
Abychom mohli začít s C co nejrychleji experimentovat, pokusíme
se ve zbytku kapitoly ukázat nejdůležitější jazykové konstrukce.
Nebudeme si činit nároky na úplnost jejich objasnění či
definice. Tuto úlohu splníme v dalších kapitolách. Zde nám
půjde spíše o vytvoření základní představy o tom, jak
program v C vypadá, případně jak použijeme jednoduchý vstup
a výstup.
Každý program v C musí obsahovat alespoň jednu funkci. Ta jediná nepostradatelná funkce se musí jmenovat main. V dalším textu budeme pro zřetelné odlišení jmen funkcí od ostatních identifikátorů používat kulaté závorky. Každý C program tedy obsahuje funkci main(), kterou vykonává při svém spuštění.
Funkce v C má deklarován typ návratové hodnoty a může mít argumenty různých typů. C disponuje datovými typy plně postačujícími pro běžné použití. Pokud to je užitečné, můžeme definovat vlastní nové datové typy. Návratovou hodnotu funkce určuje return příkaz.
Další součásti programu si popíšeme na příkladu. Jistě by nám chybělo, kdybychom jako první program napsali něco jiného, než klasické "Hello, world".
/************************/ /* HELLO.C */ /* rychly zacatek */ /************************/ #include <stdio.h> int main(void) { printf("Hello, world.\n"); return 0; } /* main */
O nepostradatelnosti funkce main() již víme. Její argument void nám říká, že jí nepředáváme žádné argumenty. Úvodní int určuje celočíselný typ návratové hodnoty. Tělo funkce je vymezeno složenými závorkami {}. Funkce printf() umožňuje formátovaný výstup. Ještě ji v této kapitole použijeme. Zde zobrazí pozdrav na monitoru.
Ve zdrojovém textu jsou ještě komentáře. Jsou vymezeny dvojicí /* a */. Vše, co se mezi těmito znaky nachází je komentář. Komentáře budeme v našich programech používat zejména pro zvýšení čitelnosti programu.
Zbývá nám příkaz preprocesoru, začleňující hlavičkový soubor: #include <stdio.h>. Zatím jen tolik, že obsahuje všechny údaje potřebné pro správné použití funkce printf().
Tento zdrojový text musíme nyní přeložit překladačem
jazyka C. Překladač musí mít k dispozici i začleněný
hlavičkový soubor4.
Pokud jsme se nedopustili žádné chyby, získáme přeložený
tvar. K němu musíme připojit kód související s výstupem.
Je uložen ve standardních knihovnách. Spojovací program se
jmenuje linker. Často se volá příkazem link. Teprve po spojení modulů
a připojení knihovních funkcí můžeme spustit proveditelný
tvar našeho prvního zdrojového textu v jazyce C. Teď je jistě
zřejmé, proč začínáme tak jednoduchým programem.
V tomto učebním textu nebudeme popisovat podrobněji
konfiguraci překladače. Ta je totiž závislá nejen na
operačním systému a jeho uživatelském nastavení. Je obvykle
závislá i na firemních verzích překladačů a podpůrných
programů.
První program nám umožnil zvládnout překlad zdrojového textu. Teď si ukážeme některé číselné datové typy a jednoduchý vstup a výstup dat. Naším úkolem je načíst celočíselnou a racionální hodnotu zobrazit výsledek jednoduchého početního výkonu, který s těmito hodnotami provedeme.
/******************************/ /* SIMPLEIO.C */ /* jednoduchy vstup a vystup */ /******************************/ #include <stdio.h> int main(void) { int i, j; float x, y; printf("zadej dve cela cisla: \n"); scanf("%d %d", &i, &j); printf("zadej racionalni cislo: \n"); scanf("%f", &x); printf("%5d + %5d = %5d\n", i, j, i+j); y = i * x; printf("%d * %f = %f\n", i, x, y); return 0; } /* main */
zadej dve cela cisla: 4 6 zadej racionalni cislo: 8.9 4 + 6 = 10 4 * 8.900000 = 35.599998
Začátek programu je stejný, jako v předchozím případu. V těle funkce main() dále vytvoříme dvě celočíselné int proměnné i, j a pak dvě racionální float proměnné x, y. Poté pomocí známého výstupu printf() zobrazíme výzvu. Na následujícím řádku pomocí formátovaného vstupu načteme dvě celočíselné hodnoty:
scanf("%d %d", &i, &j);
Hodnoty načítáme do proměnných i a j. Nesmíme před ně ovšem zapomenout umístit adresový operátor &. Ve formátovacím řetězci musíme pro celočíselnou hodnotu umístit %d. Obdobně čteme i racionální hodnotu, pak je formát %f.
Při formátovaném výstupu používáme stejné formátovací symboly. Navíc můžeme přidat i další specifikace formátu. Podrobněji se formátům vstupu a výstupu budeme věnovat v kapitole Vstup a výstup. V příkladu vidíme i přiřazení výsledku do proměnné. Navíc se jedná o smíšený výraz. Jeden z operandů je typu int, druhý float. Výsledek je přiřazen proměnné typu float.
Možný chod programu máme zobrazen v rámečku. Číselné hodnoty které zadáváme můžeme oddělit nejen klávesou Enter, ale i mezerou či tabelátorem. Výledek násobení racionální hodnoty vidíme zaokrouhlen. Vzniklo omezeným rozsahem platných míst při uložení hodnoty ve vnitřním tvaru.
První seznámení s C máme za sebou. Další výklad povedeme systematičteji.
1 Zřejmě
bychom mohli hovořit o nestandardních a nepřenositelných
obratech.
2 ANSI je
American National Standard Institute.
3 ISO je
International Standards Organisation.
4 Musíme
mu popsat, kde je tento hlavičkový soubor umístěn.
Název: | Programování v jazyce C |
Autor: | Petr Šaloun |
Do HTML převedl: | Kristian Wiglasz |
Poslední úprava: | 19.11.1996 |