C a C++ týden ITnetwork Flashka zdarma
Akce! Pouze tento týden sleva až 80 % na kurzy C++. Lze kombinovat s akcí 50 % bodů navíc na prémiový obsah!
Brno? Vypsali jsme pro vás nové termíny školení Základů programování a 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

Avatar
aXxel
Člen
Avatar
aXxel:9.10.2014 19:08

To se jedná o úplně nový článek, nebo o jeho update ?

 
Odpovědět 9.10.2014 19:08
Avatar
Neaktivní uživatel:9.10.2014 19:09

Myslím, že C/C++ a pointery by mal poznať, každý programátor :)

Odpovědět  +3 9.10.2014 19:09
Neaktivní uživatelský účet
Avatar
Michal Žůrek - misaz:9.10.2014 19:27

do mě C začali hustit ve škole a první věc co mě hodně překvapila, ž abyste mohli boužít klasický bool si musíte naincludovat stdbool.h. Pole znaků je hotová tragédie.

 
Odpovědět  ±0 9.10.2014 19:27
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Michal Žůrek - misaz
David Čápka:9.10.2014 19:30

Stdbool není myslím standardně podporovaný, takže by se používat neměl. Buď se dělá int nebo si uděláš enum.

Odpovědět  +1 9.10.2014 19:30
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 Michal Žůrek - misaz
Neaktivní uživatel:9.10.2014 19:32

môžeš použiť aj klasické int a hodnoty 0, 1 :) a pole reťazcov je síce nepraktické, ale tak väčšina String tried funguje na podobnom princípe, len je to o dosť funkčnejšie :) a je pekné vedieť ako to funguje

Odpovědět 9.10.2014 19:32
Neaktivní uživatelský účet
Avatar
Odpovídá na David Čápka
Michal Žůrek - misaz:9.10.2014 19:33

podle C99 údajně je, (jen si to musíš teda naincludovat a Visual Studio ho překouslo), každopádně je to zbytečně komplikované.

http://stackoverflow.com/…-values-in-c

 
Odpovědět 9.10.2014 19:33
Avatar
Odpovídá na Neaktivní uživatel
Michal Žůrek - misaz:9.10.2014 19:39

že jde vidět jak to funguje je sice fajn, ale pokud to chápeš, tak je to v kódu akorát hodně nepřehledné. Teda alespoň mě přijde že

String s = "ahoj";

je přehlednější a snázeji pochopitelnější než

char helloString[6] = "hello";
 
Odpovědět 9.10.2014 19:39
Avatar
Odpovídá na Michal Žůrek - misaz
Neaktivní uživatel:9.10.2014 19:48

s tým súhlasím, práve preto vznikli jazyky ako C#/Java/PHP/Python a zrovna Python je na prácu s reťazcami viac ako ideálny :)

Odpovědět 9.10.2014 19:48
Neaktivní uživatelský účet
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Michal Žůrek - misaz
David Čápka:9.10.2014 20:04

Když to přepíšeš na dynamickou definici, tak je ten rozdíl teprve vidět :) Musíš tam kopírovat přes strcpy a alokovat paměť, kterou pak musíš uvolnit.

Odpovědět 9.10.2014 20:04
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
jan.rysavy
Člen
Avatar
jan.rysavy:14.10.2014 16:46

ale je to psaný tak hrozně pesimisticky, vyjmenováno naprosto vše proč jazyk neučit :D takhle se zákazník neláká :-)

 
Odpovědět  +1 14.10.2014 16:46
Avatar
Odpovídá na jan.rysavy
Michal Štěpánek:14.10.2014 17:17

Však taky David Čápka není žádný obchodník s programovacími jazyky, ale prostřednictvím těchto stránek nabízí možnost se něco naučit. A v dnešní .NETí době musíš skutečně mít konkrétní důvod k tomu, aby ses učil staré "C" a ne "C#.NET" 8-)

Odpovědět  -1 14.10.2014 17:17
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
coells
Redaktor
Avatar
Odpovídá na Michal Štěpánek
coells:14.10.2014 17:22

A nebo musíš mít alespoň minimální rozhled. Znalost C je stále naprostým základem pro vývoj na iOS a OS X.

 
Odpovědět  +5 14.10.2014 17:22
Avatar
jan.rysavy
Člen
Avatar
Odpovídá na coells
jan.rysavy:14.10.2014 21:00

Ale jo chlapy, jasný, C je základ - jen mi to přišlo takový vyčerpaný :) naučím vás opravovat traboše, ale nikdo v něm už nejezdí, nikdo ho od vás nebude chtít, nikomu už ho neprodáte a vlastně ani benzín už do něj neseženete. článek v poho a samozřejmě um, vůle a chuť psát vůbec nějaký seriál za to nezměrný obdiv

 
Odpovědět 14.10.2014 21:00
Avatar
Odpovídá na jan.rysavy
Neaktivní uživatel:14.10.2014 21:10

Presne preto nie je dobré lipnúť na jednej platforme alebo jednom jazyku... to nie je dôležité, syntax akéhokoľvek jazyka sa dá naučiť za pár dní... to čo sa však nedá naučiť za pár dní je vedieť programovať a princípy, resp. myslieť ako programátor. Toto sa dá naučiť na akomkoľvek jazyku (samozrejme keď sa chceš učiť OOP, je lepšie zvoliť jazyk, ktorý to OOP podporuje) a netrdil by som, že C je úplne mŕtve a nikde sa nepoužíva, prinajmenšom syntax využiješ v ďalších jazykoch, ale aj iné veci. C je vždy dobré vedieť, tým sa nedá nič pokaziť. Čo sa týka samotného "myslenia ako programátor", tak výborným pomocníkom je práve matematika, pretože pri nej rozmýšlaš podobne ako pri programovaní, je skvelá na trénovanie + určite ju využiješ, nie náhodou sa učí na každej vysokej škole, ktorá je zameraná na informatiku.

Odpovědět  +1 14.10.2014 21:10
Neaktivní uživatelský účet
Avatar
Vlasta Mozny
Člen
Avatar
Vlasta Mozny:28.11.2016 15:26

Naydarek lidi prosim vas mam takou otazku kde mam sakra chybu ?? je to opsane z knihy podle screenu a i okopirovane z knihy reknete mi proc Code block to bere jako chybu a jeste nema drzost mi neulozit projekt ale zachovava predeslou relaci ?

Odpovědět 28.11.2016 15:26
„Pokud chcete, aby vás měli za lháře, vždy říkejte pravdu.“
Avatar
Jakub Žák
Člen
Avatar
Odpovídá na Vlasta Mozny
Jakub Žák:28.11.2016 15:52

Nepřehledněji už by to sem dát nešlo?

Odpovědět 28.11.2016 15:52
Kuba je ajťák. Buď jako Kuba.
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 26 zpráv z 26.