ITnetwork summer 2020
80 % bodů zdarma na online výuku díky naší Letní akci!
Pouze tento týden sleva až 80 % na e-learning týkající se PHP

1. diel - Úvod do programovacieho jazyka C

Vitajte u prvej lekcie on-line kurzu programovania v jazyku C. Budeme sa učiť postupne, od úplných začiatkov až po zložité konštrukcie, ukazovatele a napr. Prácu so súbormi. S trochou trpezlivosti a vytrvalosti sa z teba tak stane dobrý programátor.

Hneď na úvod je dobré spomenúť, že jazyk C je už pomerne historický a aj keď sa v praxi niekde stále používa, jeho účely sú veľmi špecifické. V akademickej sfére sa ešte často vyučuje ako prazáklad dnešných programovacích jazykov. Jeho naučením iste nič nepokazíte, ale ak nemáte nariadené "odpichnúť sa" práve od Céčka, myslíme si, že je možné a dokonca aj vhodnejšie začať rovno s nejakým moderným programovacím jazykom, ako sú napr. Java, C # .NET alebo na webe PHP.

Zrodenia jazyka C

Céčko navrhol Dennis Ritchie, tvorca operačného systému UNIX, v 70. rokoch 20. storočia. Práve celý UNIXový kernel je v céčku naprogramovaný, čo pravdepodobne stojí za jeho veľkým rozšírením a tiež poukazuje na extrémne výkonnosť tohto jazyka. Céčko bolo ďalej portované na najrôznejšie platformy a vyvinula sa z neho prakticky úplná väčšina dnešných moderných programovacích jazykov. Týmto jazykom sa niekedy hovorí C-like, pretože vychádzajú z céčka a podobajú sa mu svojou syntaxou (zápisom).

Aby sme plne porozumeli jazyku C, obzrie sa v dnešnom dieli do minulosti a na to, ako sa programovacie jazyky vyvíjali. Bude pre nás totiž dôležité pochopiť, ako jazyk C pracuje a v čom je jeho prínos. Ku koncu nahliadneme aj do budúcnosti a vysvetlíme si, aké má céčko oproti modernejším jazykom nevýhody.

Vývoj programovacích jazykov

1. generácie jazykov - Strojový kód

Procesor počítača vie vykonávať len obmedzené množstvo jednoduchých inštrukcií, ktoré sú uložené ako sekvencie bitov - sú to teda čísla. Tá sa mu zvyčajne zadávajú v hexadecimálne (šestnástkovej) sústave. Inštrukcie sú tak elementárne, že umožňujú iba napr. Sčítanie adries alebo skoky medzi inštrukciami. Nemožno napr. Jednoducho sčítať dve čísla, musíme sa na čísla pozerať ako na adresy v pamäti a také sčítaní čísel zaberie niekoľko inštrukcií. Program sčítající dve čísla by vyzeral napr. Takto:

2104
1105
3106
7001
0053
FFFE
0000
Tento výukový obsah pomáhajú rozvíjať nasledujúce firmy, ktoré možno hľadajú práve teba!

Inštrukcie sa procesora predloží v binárnej podobe. Takýto kód je samozrejme extrémne nečitateľný a závisí na inštrukčnú sade daného CPU. Určite v tomto jazyku nebude jednoduché tvoriť nejaké programy, bohužiaľ každý program musí byť nakoniec do tohto jazyka preložený, aby mohol byť na procesore počítača spustený.

strojový kód

2. generácia jazykov - Assembler

Assembler (skrátene ASM) nie je o nič jednoduchšie, než strojový kód, ale je ľudsky čitateľný. Jedná sa o strojový kód, v ktorom majú inštrukcie slovné označenie (kód), čiže si človek nemusí pamätať čísla. Kódy inštrukcií sa potom preloží na vyššie uvedený strojový kód. Rovnaký program by v ASM vyzeral takto:

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

Vidíme, že je to trochu ľudskejší, ale stále nezainteresovaní ľudia vôbec netušia, ako program funguje (vrátane mňa).

3. generácie jazykov

Jazyky tretej generácie konečne ponúka užívateľovi určitú abstrakciu nad tým, ako program vidí počítač. Zameriavajú sa na to, ako program vidí človek. Naše čísla sú vnímaná už ako premenné, zdrojový kód pripomína matematický zápis.

Sčítaní dvoch čísel by v jazyku C vyzeralo takto:

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

Všetci asi tušíme, čo program robí, spočíta čísla 83 a -2 a výsledok uloží do premennej c. U všetkých jazykov tretej generácie je samozrejme výhodou vysoká čitateľnosť a určite si dokážete predstaviť, akú revolúciu v programovaní jazyk priniesol, aj keď nebol zďaleka prvým jazykom tohto typu.

Kompilované jazyky

Kompilované jazyky majú teda svoj zdrojový kód v jazyku, ktorému ľudia dobre rozumie. Tento zdrojový kód sa samozrejme musí preložiť do strojového kódu, aby ho bolo možné na procesore spustiť. Tento preklad zaisťuje prekladač (kompiler), ktorý preloží naraz celý program do stroj. kódu.

Kompiler

Objektovo orientované programovanie a Garbage Collector

V čom céčko bohužiaľ zaostáva je tzv. Objektové programovanie (skrátene OOP), ktoré umožňuje programovať aplikácie veľmi prehľadne tak, že ich rozdelíme do objektov, ktoré spolu komunikujú. Prevažná väčšina moderných jazykov OOP využíva a aj keď v céčku môžeme niektoré jeho princípy nasimulovať, nedosiahneme všetkých jeho výhod. Naše programy budú bez OOP o niečo rýchlejší, ale na dnešných počítačoch a pri dnešnej zložitosti aplikácií je čoraz dôležitejšie čitateľnosť zdrojového kódu ako úspora výkonu.

Podobná situácia nastáva u absencia tzv. Garbage Collectoru, ktorý sa stará o čistení pamäti po programu. Céčko nič také nemá, čím je rýchlejší, ale oveľa, oveľa nebezpečnejšie, pretože si po sebe musí upratovať sám programátor.

Jazyk C sa niekedy prirovnáva k závodné formulu, s ktorou by ste do ulíc bežne tiež nevošiel a použili by ste ju len na závode, kde by ju riadil skúsený pretekár. Pre bežné použitie je vhodné použiť klasické auto (rozumejte modernejšie programovací jazyk).

Špecifiká jazyka C

Spomeňme si v bodoch ešte nejaké prednosti jazyka C:

  • Céčko je extrémne rýchly jazyk a preto sa používa najčastejšie k tvorbe operačných systémov alebo vyšších programovacích jazykov (v céčka je naprogramované napr PHP alebo kompilátor C ++).
  • Céčko je plne multiplatformový a dostupné na väčšine operačných systémov.
  • Céčko je jazyk so syntaxou (zápisom) podobnú úplnej väčšine dnešných programovacích jazykov.

Oveľa viac je však nevýhod:

  • Céčko nie je vysokoúrovňový jazyk, ako uvádzajú niektoré staršie materiály, aj keď ním v minulosti býval. Z dnešného pohľadu je vnímaný naopak ako jazyk nízky, teda s vyšším výkonom, ale nízkym komfortom pre programátora. Preto nie je vhodné na bežné projekty, ktoré nevyžadujú extrémny výkon (ai tam sa skôr hodí nástupca céčka, C ++).
  • Céčko ako jazyk neumožňuje prácu s textovými reťazcami, čo sa obchádza trochu nepríjemne cez pole znakov a využívanie dynamickej pamäte.
  • Céčko je jazyk neriadený as priamym prístupom do pamäti. To znamená, že sa program môžete vďaka malej nepozornosti rozbiť a môže sa to prejaviť v jeho úplne inej časti, ktorá s chybou vôbec nesúvisí. Tieto chyby sa veľmi zle hľadajú.
  • Céčko v sebe neobsahuje žiadnu štandardné knižnicu pre prácu v grafickom rozhraní, avšak existujú knižnice tretích strán.
  • Céčko nepodporuje objektovo orientované programovanie, ale obsahuje štruktúry a hlavičkové súbory, s ktorými môžeme niektoré z výhod OOP nasimulovať.

V budúcej lekcii, Inštalácia NetBeans a kompilátora C , si nainštalujeme nástroje potrebné na programovanie v céčku a vytvoríme svoj prvý program.


 

Všetky články v sekcii
Základné konštrukcie jazyka C
Článok pre vás napísal David Čápka
Avatar
Ako sa ti páči článok?
Ešte nikto nehodnotil, buď prvý!
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 sa informačné technológie naučil na Unicorn College - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity (1)

 

 

Komentáre

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= ?

Odpovedať
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#.

 
Odpovedať
27.1.2018 8:47
Avatar
Patrik Pastor:16.4.2019 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++)

 
Odpovedať
16.4.2019 11:01
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovedá na Patrik Pastor
David Čápka:16.4.2019 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.

Odpovedať
16.4.2019 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
Odpovedá na David Čápka
Patrik Pastor:16.4.2019 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...

 
Odpovedať
16.4.2019 11:09
Tento výukový obsah pomáhajú rozvíjať nasledujúce firmy, ktoré možno hľadajú práve teba!
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Patrik Pastor
DarkCoder:16.4.2019 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.

Odpovedať
16.4.2019 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
Odpovedá na DarkCoder
David Čápka:16.4.2019 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í.

Odpovedať
16.4.2019 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
Odpovedá na David Čápka
DarkCoder:16.4.2019 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.

Odpovedať
16.4.2019 12:48
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Avatar
Ondra Hájek
Člen
Avatar
Ondra Hájek:27. júna 15:01

Ahoj, všiml jsem si, že jste rozdělili C/C++ na dva samostatné kurzy.
Bude někde k přečtení článek o přechodu z jazyka C na jazyk C++?
Zrovna když jsem to začal číst, tak jste to předělali a už to nemohu najít.
Díky moc, Ondra.

 
Odpovedať
27. júna 15:01
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Ondra Hájek
DarkCoder:27. júna 15:23

Článek se nachází v sekci C++
Přechod od C k C++

Odpovedať
27. júna 15:23
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!