Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 1 - Úvod do programovacího jazyka C

Vítejte u první lekce on-line kurzu programování v jazyce C. Budeme se učit postupně, od úplných začátků až po složité konstrukce, ukazatele a např. práci se soubory. S trochou trpělivosti a vytrvalosti se z tebe tak stane dobrý programátor.

Hned na úvod je dobré zmínit, že jazyk C je již poměrně historický a i když se v praxi někde stále používá, jeho účely jsou velmi specifické. V akademické sféře se ještě často vyučuje jako prazáklad dnešních programovacích jazyků. Jeho naučením jistě nic nezkazíte, ale pokud nemáte nařízeno "odpíchnout se" právě od Céčka, myslíme si, že je možné a dokonce i vhodnější začít rovnou s nějakým moderním programovacím jazykem, jako jsou např. Java, C# .NET nebo na webu PHP.

Zrození jazyka C

Céčko navrhl Dennis Ritchie, tvůrce operačního systému UNIX, v 70. letech 20. století. Právě celý UNIXový kernel je v céčku naprogramovaný, což pravděpodobně stojí za jeho velkým rozšířením a také poukazuje na extrémní výkonnost tohoto jazyka. Céčko bylo dále portováno na nejrůznější platformy a vyvinula se z něj prakticky naprostá většina dnešních moderních programovacích jazyků. Těmto jazykům se někdy říká C-like, protože vycházejí z céčka a podobají se mu svou syntaxí (zápisem).

Abychom plně porozuměli jazyku C, ohlédněme se v dnešním dílu do minulosti a na to, jak se programovací jazyky vyvíjely. Bude pro nás totiž důležité pochopit, jak jazyk C pracuje a v čem je jeho přínos. Ke konci nahlédneme i do budoucnosti a vysvětlíme si, jaké má céčko oproti modernějším jazykům nevýhody.

Vývoj programovacích jazyků

1. generace jazyků - Strojový kód

Procesor počítače umí vykonávat jen omezené množství jednoduchých instrukcí, které jsou uloženy jako sekvence bitů - jsou to tedy čísla. Ta se mu obvykle zadávají v hexadecimální (šestnáctkové) soustavě. Instrukce jsou tak elementární, že umožňují pouze např. sčítání adres nebo skoky mezi instrukcemi. Nelze např. jednoduše sečíst dvě čísla, musíme se na čísla dívat jako na adresy v paměti a takové sečtení čísel zabere několik instrukcí. Program sčítající dvě čísla by vypadal např. takto:

2104
1105
3106
7001
0053
FFFE
0000

Instrukce se procesoru předloží v binární podobě. Takovýto kód je samozřejmě extrémně nečitelný a závisí na instrukční sadě daného CPU. Určitě v tomto jazyce nebude jednoduché tvořit nějaké programy, bohužel každý program musí být nakonec do tohoto jazyka přeložen, aby mohl být na procesoru počítače spuštěn.

Strojový kód - Základní konstrukce jazyka C

2. generace jazyků - Assembler

Assembler (zkráceně ASM) není o nic jednodušší, než strojový kód, ale je lidsky čitelný. Jedná se o strojový kód, ve kterém mají instrukce slovní označení (kód), čili si člověk nemusí pamatovat čísla. Kódy instrukcí se poté přeloží na výše uvedený strojový kód. Stejný program by v ASM vypadal takto:

ORG 100
LDA A
ADD B
STA C
HLT
DEC 83
DEC –2
DEC 0
END

Vidíme, že je to poněkud lidštější, ale stále nezasvěcení lidé vůbec netuší, jak program funguje (včetně mě).

3. generace jazyků

Jazyky třetí generace konečně nabízí uživateli určitou abstrakci nad tím, jak program vidí počítač. Zaměřují se na to, jak program vidí člověk. Naše čísla jsou vnímána již jako proměnné, zdrojový kód připomíná matematický zápis.

Sečtení dvou čísel by v jazyce C vypadalo takto:

int main(void)
{
    int a, b, c;
    a = 83;
    b = -2;
    c = a + b;
    return 0;
}

Všichni asi tušíme, co program dělá, sečte čísla 83 a -2 a výsledek uloží do proměnné c. U všech jazyků třetí generace je samozřejmě výhodou vysoká čitelnost a určitě si dokážete představit, jakou revoluci v programování jazyk přinesl, i když nebyl zdaleka prvním jazykem tohoto typu.

Kompilované jazyky

Kompilované jazyky mají tedy svůj zdrojový kód v jazyce, kterému lidé dobře rozumí. Tento zdrojový kód se samozřejmě musí přeložit do strojového kódu, aby ho bylo možné na procesoru spustit. Tento překlad zajišťuje překladač (kompiler), který přeloží najednou celý program do stroj. kódu.

Kompiler - Základní konstrukce jazyka C

Objektově orientované programování a Garbage Collector

V čem céčko bohužel zaostává je tzv. objektově orientované programování (zkráceně OOP), které umožňuje programovat aplikace velmi přehledně tak, že je rozdělíme do objektů, které spolu komunikují. Naprostá většina moderních jazyků OOP využívá a i když v céčku můžeme některé jeho principy nasimulovat, nedosáhneme všech jeho výhod. Naše programy budou bez OOP o něco rychlejší, ale na dnešních počítačích a při dnešní složitosti aplikací je stále důležitější čitelnost zdrojového kódu než úspora výkonu.

Podobná situace nastává u absence tzv. Garbage Collectoru, který se stará o čištění paměti po programu. Céčko nic takového nemá, čímž je rychlejší, ale mnohem, mnohem nebezpečnější, protože si po sobě musí uklízet sám programátor.

Jazyk C se někdy přirovnává k závodní formuli, se kterou byste do ulic běžně také nevjeli a použili byste ji jen na závodě, kde by ji řídil zkušený závodník. Pro běžné použití je vhodné použít klasické auto (rozumějte modernější programovací jazyk).

Specifika jazyka C

Zmiňme si v bodech ještě nějaké přednosti jazyka C:

  • Céčko je extrémně rychlý jazyk a proto se používá nejčastěji k tvorbě operačních systémů nebo vyšších programovacích jazyků (v Céčku je naprogramované např PHP nebo kompilátor C++).
  • Céčko je plně multiplatformní a dostupné na většině operačních systémů.
  • Céčko je jazyk se syntaxí (zápisem) podobnou naprosté většině dnešních programovacích jazyků.

Mnohem více je ovšem nevýhod:

  • Céčko není vysokoúrovňový jazyk, jak uvádějí některé starší materiály, i když jím v minulosti býval. Z dnešního pohledu je vnímán naopak jako jazyk nízký, tedy s vyšším výkonem, ale nízkým komfortem pro programátora. Proto není vhodné na běžné projekty, které nevyžadují extrémní výkon (a i tam se spíše hodí nástupce céčka, C++).
  • Céčko jako jazyk neumožňuje práci s textovými řetězci, což se obchází poněkud nepříjemně přes pole znaků a využívání dynamické paměti.
  • Céčko je jazyk neřízený a s přímým přístupem do paměti. To znamená, že se program můžete díky malé nepozornosti rozbít a může se to projevit v jeho úplně jiné části, která s chybou vůbec nesouvisí. Tyto chyby se velmi špatně hledají.
  • Céčko v sobě neobsahuje žádnou standardní knihovnu pro práci v grafickém rozhraní, avšak existují knihovny třetích stran.
  • Céčko nepodporuje objektově orientované programování, ale obsahuje struktury a hlavičkové soubory, s nimiž můžeme některé z výhod OOP nasimulovat.

V příští lekci, Instalace NetBeans a kompilátoru C, si nainstalujeme nástroje potřebné k programování v céčku a vytvoříme svůj první program.


 

Všechny články v sekci
Základní konstrukce jazyka C
Přeskočit článek
(nedoporučujeme)
Instalace NetBeans a kompilátoru C
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
238 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity