C (programovací jazyk): Porovnání verzí

Z Wikipedie, otevřené encyklopedie
Smazaný obsah Přidaný obsah
m →‎Cyklus for: odkaz for cyklus
FlaBot (diskuse | příspěvky)
Řádek 185: Řádek 185:
[[pl:C (język programowania)]]
[[pl:C (język programowania)]]
[[pt:Linguagem de programação C]]
[[pt:Linguagem de programação C]]
[[ro:Limbajul C]]
[[ro:Limbajul de programare C]]
[[ru:Си (язык программирования)]]
[[ru:Си (язык программирования)]]
[[sh:C (jezik)]]
[[sh:C (jezik)]]

Verze z 31. 12. 2006, 17:51

C je programovací jazyk, který vyvinuli Ken Thompson a Dennis Ritchie pro potřeby operačního systému Unix. V současné době je to jeden z nejpopulárnějších jazyků, zřejmě nejčastější pro psaní systémového softwaru, ale velmi rozšířený i pro aplikace.

Vlastnosti

C je nízkoúrovňový, kompilovaný, relativně minimalistický programovací jazyk. Je dostatečně mocný na většinu systémového programování (ovladače a jádro OS) a zbytek lze dořešit tzv. inline assemblerem, tedy metodou zápisu assembleru přímo do kódu. Zdrojový kód C je přitom mnohem čitelnější než assembler, je jednodušší ho zapsat a navíc je snáze přenositelný na jiné architektury. Proto jsou často operační systémy, překladače, knihovny a interpretry vysokoúrovňových jazyků implementovány právě v C.

Ukládání dat je v C řešeno třemi základními způsoby: statickou alokací paměti (při překladu), automatickou alokací paměti na zásobníku, dynamickou alokací na haldě (heap) pomocí knihovních funkcí. Jazyk nedisponuje žádnou abstrakcí nad alokací: s pamětí se pracuje přes datový typ zvaný ukazatel, který drží odkaz na paměť, ale je na něm možné provádět aritmetické operace. Ukazatelé tedy existují nezávisle na proměnných, na které odkazují, a je na odpovědnosti programátora, aby neukazovali na paměť nealokovanou.

Jazyky Java a C#, oba odvozené od C, používají méně univerzální způsob odkazování alokovaných proměnných, který snižuje pravděpodobnost chyby v programu. Jazyk C++, původně rozšíření jazyka C, si ovšem ukazatele zachoval.

Mnoho dalších moderních programovacích jazyků přebírá způsob zápisu (neboli syntaxi) z jazyka C. Patří mezi ně například zmíněná Java či Perl a PHP.

Historie

Počátky

Vývoj jazyka C začal v Bellových laboratořích AT&T mezi léty 1969 a 1973. Ritchie tvrdí, že nejpřínosnější období bylo v roce 1972. Pojmenování „C“ zvolili, protože mnoho vlastností přebírali ze staršího jazyka zvaného „B“, jehož název byl zase odvozen od jazyka BCPL (ale to není jisté, neboť Thompson také vytvořil jazyk Bon na poctu své ženy Bonnie).

V roce 1973 se stal jazyk C dostatečně stabilním. Většina zdrojového kódu jádra Unixu, původně napsaného v assemleru PDP-11, byla přepsána do C. Unix tedy patří mezi první operační systémy, které byly napsané v jiném než strojovém jazyce či assembleru. Předchozí byl například systém Multics (napsaný v PL/I) a TRIPOS (napsaný v BCPL).

K&R C

V roce 1978, Ritchie a Brian Kernighan vydali první vydání knihy The C Programming Language. Tato kniha, mezi programátory C známá jako „K&R“, sloužila po mnoho let jako neformální specifikace jazyka. Verze C, kterou takto popsali, bývá označována jako „K&R C“. (Druhé vydání knihy popisovalo novější standard ANSI C.)

K&R zavedli následující vlastnosti jazyka:

  • datový typ struct
  • datový typ long int
  • datový typ unsigned int
  • Operátor =+ byl změněn na +=, a podobně (=+ mátl lexikální analyzér překladače C).

K&R C je považován za základní normu, kterou musejí obsahovat všechny překladače jazyka C. Ještě mnoho let po uvedení ANSI C to byl „nejmenší společný jmenovatel“, který využívali programátoří v jazyce C kvůli maximální přenositelnosti, protože zdaleka ne všechny překladače plně podporovaly ANSI C.

V několika letech následujících po uvedení K&R C bylo uvedeno a přidáno několik „neoficiálních“ vlastností jazyka, které byly podporovány překladači od AT&T a některých dalších dodavatelů. Změny zahrnují:

  • datový typ void * a funkce vracející void
  • funkce vracející typ struct nebo union
  • položky ve struct se ukládají do odděleného jmenného prostoru pro každý struct
  • modifikátor const
  • standardní knihovnu zahrnující většinu funkcí implementovaných různými dodavateli
  • výčtový typ enumeration
  • datový typ float

ANSI C a ISO C

V pozdních sedmdesátých letech začalo C nahrazovat BASIC jako přední programovací jazyk pro mikropočítače. Během osmdesátých let bylo přejato pro použití na platformě IBM PC a jeho popularita se značně zvýšila. 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ě Unixu.

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 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 (i) použití nestandadních knihoven, např. pro grafiku, a také (ii) 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 (tj. 64 bitový integer), bool (logický ano/ne typ) nebo typ complex určený na reprezentaci komplexních čísel.
  • Pole s nekonstantní velikostí
  • Podpora pro zakomentování jednoho řádku //, tak jako v jazycích C++ nebo BCPL
  • Nové knihovní funkce, hlavně ve formě náhrady za funkce náchylné na buffer overflow, např. snprintf()
  • Nové hlavičkové soubory, např. stdint.h

Standard C99 je v některých ohledech přísnější než původní standard C89; například je zakázáno odkazovat na stejnou paměť ukazateli jiných typů. Toto umožňuje vylepšenou 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 (datový typ complex v C99 versus třída complex v C++).

„Hello, World!“ v C

Následující jednoduchá aplikace vypíše „Hello, World!“ na standardní výstup (většinou obrazovku, ale může to být i do souboru nebo na jiné hardwarové zařízení nebo dokonce i bit bucket, což závisí na nastavení standardního výstupu v době spuštění programu). Jedna z verzí se poprvé objevila v K&R.


#include <stdio.h>

int main(void)
{
    printf("Hello, World!\n");
    return 0;
}


Charakteristika jazyka C

Datové typy

Programovací jazyk C má tyto datové typy:

  • char - Používá se pro znaky
  • int - Používá se pro celá čísla
  • float - Používá se pro desetiné číslo s plovoucí řadovou čárkou
  • double - Používá se pro desetiné číslo s plovoucí řadovou čárkou s dvojnásobnou přesností
  • void - Používá se pokud nepotřebujeme žádnou hodnotu (např. u funkcí)

Řídící příkazy

Řídící příkazy určují průběh zpracovávání program. Jako takové tvoří páteř programů.

if

Příkaz if je jedním z příkazů jazyka C pro větvení programu (někdy nazývané také jako podmíněné příkazy). Jeho činnost je určena výsledkem testu podmínky, která je vyhodnocena jako pravdivá, nebo nepravdivá. Jednoduše řečeno, podmíněné činí rozhodnutí na základě vyhodnocení nějaké podmínky.

if (výraz)
        příkaz;

if - else

K příkazu if můžete přidat else pokud tak učiníte tak programu řeknete co má dělat i pokud bude podmínka nepravdivá konstrukce poté může vypadat takto:

if (výraz)
        příkaz1;
else
        příkaz2;

Cyklus for

Příkaz cyklu for je jedním ze tří příkazů cyklu v jazyku C. Umožňuje opakovat jeden, nebo více příkazů. Cyklus for je mnohými programátory v jazyku C považován za jeho nejpružnější příkaz. Cyklus for se používá pro zadaný počet opakování příkazu, nebo bloku příkazu. Jeho obecný formát pro opakování jednoho příkazu vypadá takto:

for (inicializace; test podmínky; inkrementace)
        příkaz;

Příbuzné jazyky

Jazyky C++ a Objective-C vznikly jako odpověd na vlnu popularity objektově orientovaného programování (OOP) v 80. letech 20. století. Obě tyto rozšíření jazyka C byly nejprve implementovány ve formě preprocesoru, tedy zdrojový kód byl nejprve přeložen do C a poté zkompilován kompilátorem jazyka C. Kromě toho vzniklo velké množství jazyků, které sice s jazykem C nejsou příbuzné, ale které částečně přejaly syntaxi jazyka (Java, C#, D) nebo dokonce jména některých knihovních funkcí (PHP).

C++

Jazyk C++ je odvozen z jazyka C, není s ním ale úplně kompatibilní. Rozdíl, který způsobuje nejvíce problémů s kompilací je způsoben tím, že C++ definuje mnohem striktnější pravidla pro přetypování datových typů. Kromě OOP implementuje C++ také generické a procedurální programování.

Objective-C

Objective-C je odvozen z jazyků C a Smalltalk, přičemž s C je úplně kompatibilní (tedy je možné zkompilovat libovolný zdrojový text s překladačem Objective-C). Syntaxe týkající se preprocesoru, výrazů, deklarací funkcí a volání funkcí je odvozena z C, zatímco objektově orientované programování je odvozeno z jazyka Smalltalk.

Literatura

Externí odkazy