Email byl přidán do databáze

Přihlášení k odběru novinek

Emailem budete informováni v případě publikování nového článku.

Napište mi

Tutoriál jazyka C/C++

Historie jazyka C

Vytisknout
-
+

Jazyk C je jeden z nejstarších imperativních a strukturovaných jazyků vůbec. Byl vytvořen v Bellových laboratořích začátkem 70. let 20. století. Autorem byl spolutvůrce operačního systému Uɴɪx, tehdy jedna-třiceti letý americký programátor Dennis Ritchie (čti "Denis Ritčí"), který se postaral o kompletní návrh jazyka.

Unics

Ken Thompson (čti "Ken Tompsn") z týmu vývojářů Bellových laboratoří se dlouhodobě podílel na vývoji pro sálový počítač GE-645, pro který napsal také hru nazvanou Space Travel. Avšak shledal, že hra je na strojích GE příliš pomalá a drahá (cena jednoho běhu hry byla přibližně 75 dolarů - dnes cca 7 000 Kč). Ritchie pomohl Thompsonovi přepsat hru Space Travel do jazyka symbolických adres. Tato zkušenost spolu s prací na projektu Multics vedla k tomu, že Ken Thompson začal na PDP-7 psát sám pro sebe nový operační systém který nazval Unics. Jednalo se o první verze Uɴɪxu, které byly napsány přímo pomocí strojového kódu později pomocí jazyka symbolických adres (nepřesně označovaného jako assemblere).

C & Uɴɪx

Souběžně s Thompsonem pracoval i Ritchie, pod záštitou Bellových laboratoří, na soukromém projektu. Inspirovaný jazyky BCPL a B začal tvořit první jazyk, který by umožňoval tvorbu snadno přenositelných (multiplarformních) programů. Do té doby musel být každý program upraven nebo dokonce zcela přepsán pro každý, byť minimálně odlišný výpočetní stroj. Vývoj jazyka trval řadu let a za celou dobu spolykal nemalé finanční prostředky. V období, když se ukázala praktická výhoda již nově přejmenovaného systému Uɴɪx, začali jeho vývoj podporovat i samotné Bellovy laboratoře. Systém se stále rozrůstal a s jeho stále narůstajícími možnostmi narůstala i jeho složitost. Bylo stále těžší a velmi finančně náročné udržovat vývoj na efektivní úrovni. V tuto chvíli nastoupil Dennis Ritchie se svou již poměrně stabilní verzí jazyka C. Tomphson a Ritchie spojili síly a společně přepsali celý kernel, později i zbytek Uɴɪxu do zdrojového kódu jazyka C. Vývoj se rázem zjednodušil a souběžně s tím umožnil i poměrně snadnou multiplatformní rozšiřitelnost.

Standardizace norem

I když by se tak mohlo zdát, jazyk C není příliš rozsáhlý, většinu jeho funkcí tvoří jeho přídavné knihovny jež vznikaly postupně. Také se nevyznačuje dobrou čitelností kódu. Svým původem je zaměřený k systémovému programování. Na jedné straně je ho možné zařadit mezi vyšší jazyky, na druhé straně je program napsaný pomocí C možné přeložit do velmi efektivního strojového kódu. Jazyk má poměrně málo jednotlivých pravidel, pomocí kterých lze tvořit a skládat bloky kódu do větších a větších celků.
O těchto pravidlech si povíme v některé z následujících kapitol.

ANSI a ISO

V pozdních sedmdesátých letech byl jazyk C nahrazován BASICem jakožto přední programovací jazyk pro mikropočítače. Tou dobou Bjarne Stroustrup a další v Bellových laboratořích začali pracovat na rozšiřování C o objektově orientované prvky. Jazyk, který vytvořili, zvaný C++, je dnes nejrozšířenější programovací jazyk pro aplikace na Microsoft Windows; C zůstává stále populárnější ve světě Uɴɪxu.

V roce 1983 se American National Standards Institute (ANSI) dohodla na sestavení komise X3J11, aby vytvořila standardní specifikaci C. Po dlouhém a pracném procesu byl standard dokončen v roce 1989 a schválen jako ANSI X3.159-1989 "Programming Language C". Tato verze jazyka je často stále označována jako ANSI C. V roce 1990 byl standard ANSI C (s drobnými změnami) adoptován institucí International Organization for Standardization (ISO) jako "ISO 9899|ISO/IEC 9899:1990".

Jedním z cílů standardizačního procesu ANSI C byl vytvořit nadmnožinu původního standardu K&R C zahrnující mnoho "neoficiálních vlastností". Navíc standardizační komise přidala několik vlastností jako funkční prototypy (vypůjčené z C++) a schopnější preprocesor.

ANSI C je dnes podporováno téměř všemi rozšířenými překladači. Většina kódu psaného v současné době v C je založena na ANSI C. Jakýkoli program napsaný pouze ve standardním C je přeložitelný a spustitelný na jakékoli platformě, která odpovídá tomuto standardu. Nicméně mnoho programů se dá přeložit pouze na jedné platformě nebo jedním překladačem, kvůli použití nestandardních knihoven, např. pro grafiku, a také některé překladače v implicitním módu neodpovídají standardu ANSI C.

C99

Po standardizaci jazyka v roce 1989 se většina vývoje soustředila na jazyk C++. Přesto však na konci 90. let došlo k vydání dokumentu ISO 9899:1999 (obvykle nazývaný C99), který byl následně v březnu 2000 přijat i jako ANSI standard.

C99 představil několik nových vlastností, které byly mnohdy v překladačích už implementovány jako rozšíření:

  • inline funkce
  • proměnné mohou být deklarovány kdekoli (jako v C++), v C89 mohly být deklarovány pouze na začátku bloku
  • několik nových datových typů, včetně long long int, bool nebo typ complex určený na reprezentaci komplexních čísel
  • pole s nekonstantní velikostí
  • podpora pro zakomentování jednoho řádku //
  • nové knihovní funkce, hlavně ve formě náhrady za funkce náchylné na přetečení na zásobníku
  • nové hlavičkové soubory, např. stdint.h
  • variadická makra (makra C preprocesoru s proměnným počtem argumentů)
  • klíčové slovo restrict, které v deklaraci ukazatele specifikuje, že na paměť odkazovanou tímto ukazatel nepřistupuje žádný jiný ukazatel (např. int* restrict foo;), díky čemuž překladač může produkovat optimalizovanější kód; zajištění, aby tomu skutečně tak bylo, je na programátorovi (při nedodržení je chování programu nedefinované)

Standard C99 je v některých ohledech přísnější než původní standard C89. Například je (až na výjimky) zakázáno přistupovat k paměti prostřednictvím ukazatele jiného typu, než pomocí jakého byla zapsána. Toto omezení poskytuje překladači prostor k lepší optimalizaci, ale může způsobit problémy s kompilací starších programů.

Žádný kompilátor zatím neobsahuje kompletní implementaci C99, přestože některé jsou poměrně blízko (GCC). Firmy jako Microsoft nebo Borland neprojevily velký zájem o implementaci C99, především kvůli tomu, že většinu nových vlastností poskytuje C++ a to často nekompatibilně s C99.

Jednoduchá charakteristika jazyka C

Na závěr si tedy shrneme základní informace, které bychom si měli z této kapitoly odnést. Jazyk C je relativně nízkoúrovňový (systémový) jazyk, který je ideální pro vývoj operačních systémů, driverů, překladačů, a dalších. Jako jeden z mála jazyků podporuje obrovské množství rozličných knihoven. Celý systém programování v jazyce C trpí nižší efektivitou vývoje, která je vykoupena rychlým a elegantním kódem.

Výhody:

  • C je velmi rychlý jazyk, vhodný pro tvorbu operačních systému nebo vyšších programovacích jazyků ( PHP nebo kompilátor C++ )
  • většina moderních jazyků vychází více či méně právě z jazyka C a tedy syntaxe všech těchto jazyků je velmi podobná
  • plně přenositelný a tedy dostupná na téměř libovolné platformě

Nevýhody:

  • z velké části je odkázán na zkušenosti programátora a k tvorbě složitých programů vyžaduje hluboké pochopení
  • není vhodný pro běžné projekty, které nevyžadují extrémně vysoký výkon (vhodnější je c++)
  • C neumí efektivně pracovat s textovými řetězci, což se ochází pomocí pole znaků a využitím dynamické paměti
  • Céčko je neřízený jazyk s přímým přístupem do paměti, což znamená, že program může díky nepatrné chybě chybovat, a tato chyba se může projevit v úplně jiné části programu !!pozor tyto chyby se velmi špatně hledají!!
  • Standardizovaná norma neobsahuje žádnou standardní knihovnu pro práci v grafickém rozhraní
  • Nelze využívat objektově orientované programování, ale obsahuje struktury a hlavičkové soubory, které přinášejí výhody, jimiž lze OOP simulovat

Moderní příbuzné jazyky vycházející z C

  • C++
  • Objective-C
  • Concurrent-C
  • Perl
  • Python
  • Javacsript
  • C#
  • Go
  • Limbo
  • LPC
  • Smalltalk
  • C shell
  • Java
  • D
  • Fortan
  • Chapel
  • Ch
  • Cilk/Cilk++
  • PHP
  • a další