1. díl - Úvod do programovacího jazyka C

C++ Základní konstrukce C Úvod do programovacího jazyka C

Vítejte u prvního dílu seriálu o programovacím 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ím tutoriálu si nainstalujeme nástroje potřebné k programování v céčku a vytvoříme svůj první program.


 

  Aktivity (3)

Článek pro vás napsal David Čápka
Avatar
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 se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.

Jak se ti líbí článek?
Celkem (14 hlasů) :
4.785714.785714.785714.785714.78571


 


Miniatura
Všechny články v sekci
Programování v jazyce C - Základy
Miniatura
Následující článek
Instalace NetBeans a kompilátoru C

 

 

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

Avatar
Michal Žůrek (misaz):

ž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
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Michal Žůrek (misaz)
Neaktivní uživatel:

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:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
jan.rysavy
Člen
Avatar
jan.rysavy:

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 14.10.2014 16:46
Avatar
Odpovídá na jan.rysavy
Michal Štěpánek:

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  ±0 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:

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  +4 14.10.2014 17:22
Avatar
jan.rysavy
Člen
Avatar
Odpovídá na coells
jan.rysavy:

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:

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:

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. listopadu 15:26
Avatar
Jakub Žák
Člen
Avatar
Odpovídá na Vlasta Mozny
Jakub Žák:

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

 
Odpovědět 28. listopadu 15:52
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 16. Zobrazit vše