Java týden Java týden
Pouze tento týden sleva až 80 % na celý Java e-learning!
Brno? Vypsali jsme pro vás nové termíny školení OOP v Brně!

Lekce 1 - Úvod do programovacího jazyka C

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

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ě poruzumě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

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

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.


 

 

Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
32 hlasů
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Všechny články v sekci
Základní konstrukce jazyka C
Miniatura
Následující článek
Instalace NetBeans a kompilátoru C
Aktivity (7)

 

 

Komentáře
Zobrazit starší komentáře (16)

Avatar
Vlasta Mozny
Člen
Avatar
Odpovídá na Vlasta Mozny
Vlasta Mozny:22.1.2017 16:19

beru z5 uz jsem to pochopil

Editováno 22.1.2017 16:21
Odpovědět 22.1.2017 16:19
„Pokud chcete, aby vás měli za lháře, vždy říkejte pravdu.“
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na Vlasta Mozny
patrik.valkovic:22.1.2017 16:22

Výstup je správný.....a=10,a=a\2 je 5. B je 22 a c je 5. Nevidím v tom chybu.

Odpovědět 22.1.2017 16:22
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Vlasta Mozny
Člen
Avatar
Vlasta Mozny:22.1.2017 16:27

tudiz otazka druha proc se musi zadavat na a=5 b=11 ? ta jedenactka mi neleze do hlavy . kolik by teda bylo kdybych teda napsal treba a= 9 kolik by bylo b= ?

Odpovědět 22.1.2017 16:27
„Pokud chcete, aby vás měli za lháře, vždy říkejte pravdu.“
Avatar
Michal Ch.
Člen
Avatar
Michal Ch.:27.1.2018 8:47

Céčko je základ. Od céčka se odvíjí C++ a to je základem Javy a C#.

 
Odpovědět 27.1.2018 8:47
Avatar
Patrik Pastor:16. dubna 11:01

umim zaklady C# a oop v nem, ale chtel bych zacit s ceckem. Lepsi zacit s C nebo C++? (chcu se naucit praktiky a myslet jako programator, a myslim, ze by mi stacilo C++)

 
Odpovědět 16. dubna 11:01
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Patrik Pastor
David Čápka:16. dubna 11:06

Ahoj Patriku, to je asi jako by jsi se ptal, zda je lepší kladivo nebo šroubovák. Každý nástroj (programovací jazyk) je vhodný na něco jiného. Jejich výhody a nevýhody máš v úvodních článcích vždy napsané, určitě sis je přečetl a můžeš si tak jednoduše vybrat.

Odpovědět 16. dubna 11:06
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Odpovídá na David Čápka
Patrik Pastor:16. dubna 11:09

Ano, prave ctu prechod mezi C a C++ abych videl alespon nejake rozdily ktere dokazu pochopit (coz je prechod k oop - kteremu vice rozumim z c#) - zase ale nerozumim alokovani pameti, kde ve visual studiu je Gcollector. Asi bych se upnul k C++ kvuli editoru - mam Visual Studio, a pro cecko bych musel stahovat NetBeans, coz mi neprijde zcela komfortni. Stale ale jeste ctu ty rozdily, protoze jak jsem psal - chcu vedet co se vlastne deje "pod poklickou", popr jak funguje compilator, apod, apod...

 
Odpovědět 16. dubna 11:09
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Patrik Pastor
DarkCoder:16. dubna 12:28

Správný přístup. Pokud se chceš naučit a pochopit co jak funguje a nebýt v budoucnu ničím překvapen, programuj v C. Jaké jsou rozdíly mezi C a C++ poznáš pouze tehdy, naučíš-li se oba jazyky. Zde není žádný Garbage Collector, řešíš si vše sám. Je lepší mít nad tím vším vlastní kontrolu než se spoléhat na něco z venčí. Visual Studio můžeš použít i pro vývoj aplikací v C.

Odpovědět  -1 16. dubna 12:28
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na DarkCoder
David Čápka:16. dubna 12:31

Tohle je přesně proč tu zavíráme podobné diskuze.

Je lepší mít nad tím vším vlastní kontrolu než se spoléhat na něco z venčí.

Ne, není to lepší ani horší. Má to svoje pro a proti. Tvoje aplikace je rychlejší, ale typicky méně stabilní. Pokud si chcete povídat, tak prosím do soukromých zpráv, takovéhle polopravdy v komentářích se tu snažíme moderovat. Díky za pochopení.

Odpovědět 16. dubna 12:31
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
DarkCoder
Člen
Avatar
Odpovídá na David Čápka
DarkCoder:16. dubna 12:48

Tvoje aplikace je rychlejší, ale typicky méně stabilní.

Nesmysl. Proč by musela být aplikace nutně méně stabilní?! Implementace vlastního ošetření na míru bude vždy lepší, jen si vyžaduje dokonalou znalost toho co se požaduje, což v některých případech ale může být velmi obtížné a časově náročné. Vše má své pro a proti.

Odpovědět  -1 16. dubna 12:48
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 26. Zobrazit vše