Standardní knihovna jazyka C

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
Standardní hlavičkové soubory

Standardní knihovna jazyka C je v informatice sada standardů pro knihovny a hlavičkové soubory programovacího jazyka C dle normy ISO C. Obsahuje funkce jazyka C zajišťující vstup a výstup, práci s textovými řetězci a podobně. Standardní knihovna jazyka C je standardizované rozhraní jazyka C popsané tímto dokumentem, nejedná se však o programovou knihovnu, jež by byla propojitelná s programy napsanými v jazyce C, knihovna s tímto názvem neexistuje.

Termín run-time knihovna jazyka C se na některých platformách používá pro označení sady základních knihoven, které mají za úkol dynamické propojení s operačním systémem (za i bez podpory hlavičkových souborů). Tohoto označení se také užívá pro knihovny distribuované s kompilátorem jazyka C. Označení run-time se používá pro balíček knihoven a hlavičkových souborů, které jsou potřeba pro úspěšnou činnost kompilátoru. Run-time neposkytuje pouze funkce standardní knihovny jazyka C, ale i další součásti potřebné pro fungující program napsaný v jazyce C. Mezi tyto další součástí patří inicializace volání funkce main, či podprogramy nahrazující aritmetické funkce, jež nejsou obsaženy v CPU a jsou potřebné pro kód generovaný kompilátorem jazyka C.

Historie[editovat | editovat zdroj]

Programovací jazyk C, na rozdíl od tehdy tradičních jazyků jako byl Cobol a Fortran, před svou standardizací neobsahoval vnořené funkce jako například vstupně/výstupní operace. Nedostatek postupem času napravovala uživatelská komunita, vytvářející myšlenku implementace chybějících funkcí a později i jejich stmelení do sady, která se nyní nazývá Standardní knihovna jazyka C. Mnoho z těchto myšlenek se zároveň stalo přímo součástí definice standardu programovacího jazyka C.

Unix a programovací jazyk C vznikaly v Bellových laboratořích firmy AT&T na konci šedesátých a počátku sedmdesátých let. Během sedmdesátých let nabral programovací jazyk C na popularitě a mnoho universit a vládních i nevládních organizací začalo používat ve svých projektech své vlastní variace jazyka, což na počátku osmdesátých let vyústilo ve zřejmé problémy vzájemné kompatibility rozdílných implementací. V roce 1983 sestavil institut ANSI komisi za účelem vytvoření specifikace standardu dnes známého jako ANSI C, která v roce 1989 vyvrcholila vznikem standardu C89. Součástí nově vzniklého standardu je i sada softwarových knihoven nazvaná ANSI C standard library (Standardní knihovna ANSI C).

Následující verze standardu jazyka C přinášely do vzniklé knihovny další požadované hlavičkové soubory, ale podpora těchto nových rozšíření se liší v závislosti na jednotlivých implementacích. Hlavičkové soubory <iso646.h>, <wchar.h> a <wctype.h> byly přidány s prvním rozšířením normy (označovaným NA1) v roce 1995. Následující aktualizace byla provedena v roce 1999 v souvislosti s vydáním standardu C99 a přibyly hlavičkové soubory s názvy: <complex.h>, <fenv.h>, <inttypes.h>, <stdbool.h>, <stdint.h> a <tgmath.h>.

Standard ISO[editovat | editovat zdroj]

Knihovna standardu ISO C se skládá z 24 hlavičkových souborů jazyka C, pomocí kterých je možné vytvořit program nezávislý na svém okolí. Každý hlavičkový soubor obsahuje jednu či více deklarací funkcí a definice typů a maker. Hlavičkové soubory standardu ISO C jsou uvedeny v tabulce níže.

V porovnání s jinými jazyky (například Java) je velikost standardní knihovny nepatrná. Knihovna poskytuje základní sadu matematických funkcí, funkce pro práci s řetězci a funkce pro souborový a konzolový vstup a výstup. Nezahrnuje ale standardní sadu pro práci s kontejnery, která je obsažena ve standardu knihovny C++, také se nezabývá specifikací grafického uživatelského rozhraní, síťových nástrojů a dalších, které jsou obsaženy například ve standardu programovacího jazyku JAVA. Hlavní výhodou plynoucí z kompaktnosti malé standardní knihovny je její jednoduchost a následná snadná přenositelnost na nové platformy.

V průběhu času bylo vydáno několik knihoven, které přidávají stejné funkce jako standardní knihovny jiných jazyků. Mezi nejznámější knihovny paří projekt GNOME, který vytvořil soubor grafických nástrojů GTK+ a GLib. Jejich nevýhoda samozřejmě spočívá v tom, že spolu jednotlivé nestandardní knihovny vzájemně nespolupracují a programátoři se většinou musí učit pracovat s novými sadami funkcí.

Standard ISO C hlaviček knihoven[editovat | editovat zdroj]

<assert.h> Obsahuje makra pro práci s chybami, která se používají při detekci a odlaďování chyb.
<complex.h> Soubor funkcí, určený pro práci s komplexními čísly (nově v C99).
<ctype.h> Obsahuje funkce pro rozlišení velkých a malých písmen a jejich vzájemným převodem bez závislosti na použité znakové sadě (většinou se využívá sady ASCII, či jejích nástaveb, i když je možné i použití sady EBCDIC.
<errno.h> Testování chybových kódů hlášených funkcemi knihoven.
<fenv.h> Práce v prostředí s pohyblivou řádovou čárkou (nově v C99).
<float.h> Obsahuje definici konstant určených pro práci s knihovnou pro výpočty s plovoucí desetinnou čárkou. Mezi tyto funkce patří například výpočet minimální vzdálenosti dvou čísel s plovoucí desetinnou čárkou (_EPSILON), výpočet maximální přesnosti s použitou desetinnou přesností (_DIG) a funkce pracující s rozsahem použitých číslic (_MIN, _MAX).
<inttypes.h> Pro přesné převody mezi typy integer (nově v C99).
<iso646.h> Pro programování pomocí znakové sady ISO 646 (nově v NA1).
<limits.h> Obsahuje předdefinované konstanty a vlastnosti typů integer, jako je rozsah čísel, který se může zobrazit (_MIN, _MAX).
<locale.h> Pro setlocale() a konstanty s ní související. Tato funkce se používá pro výběr potřebné lokalizace.
<math.h> Výpočty s běžnými matematickými funkcemi.
<setjmp.h> Deklaruje makra setjmp a longjmp, která se používají pro práci s vnějšími proměnnými.
<signal.h> Knihovna pro reakci při různých výjimečných situacích (výjimky, signály).
<stdarg.h> Přístup k argumentům předaným funkcím.
<stdbool.h> Datový typ boolean (nově v C99).
<stdint.h> Definice dalších typů integer (nově v C99).
<stddef.h> Několik užitečných datových typů a maker.
<stdio.h> Podpora vstupů a výstupů jádra programovacího jazyka C. Tento soubor obsahuje "posvátnou" funkci printf.
<stdlib.h> Pro práci s rozličnými operacemi mezi které patří: generátor pseudonáhodných čísel, rozdělování paměti, kontrola procesů, vyhledávání a třídění.
<string.h> Pro práci s různými druhy řetězců.
<tgmath.h> Pro matematické funkce pro práci s obecnými datovými typy (nově v C99).
Pro konverzi mezi různými formáty data a času.
<wchar.h> Pro práci s různými druhy znaků, je potřebná pro programy v jiných jazycích (nově v NA1).
<wctype.h> Pro klasifikaci širokého spektra znaků (nově v NA1).

Standardní knihovna jazyka C v jiných jazycích[editovat | editovat zdroj]

Některé programovací jazyky zahrnují funkce standardní knihovny jazyka C ve svých vlastních knihovnách. Knihovny v jiných programovacích jazycích jsou většinou přizpůsobené, aby více vyhovovaly struktuře daného programovacího jazyka, ale funkce a sémantika je zachována. Programovací jazyk C++ například zahrnuje funkce standardu knihovny ANSI C, co se týče jména funkcí std (jako std::printf, std::atoi, std::feof, etc.) a podobná jména hlavičkových souborů (cstdio, cmath, cstdlib atd.). Dalšími jazyky s podobným přístupem k programování, jako má jazyk C jsou: programovací jazyk D a převládající implementace jazyka Python známá jako CPython.

Knihovny v kompilátoru[editovat | editovat zdroj]

Některé kompilátory (například GCC)[1] přikládají vlastní verze některých funkcí ze standardní knihovny jazyka C. To znamená, že funkce jsou zapsány přímo v kompilovaném objektovém souboru a program je volá namísto funkcí ve sdílené knihovně jazyka C. Vnořené (anglicky builtin) funkce musí svým chováním respektovat standard ISO C.

Implementace[editovat | editovat zdroj]

Unixové systémy mají většinou zabudovanou sdílenou knihovnu jazyka C, ale ne vždy jsou v instalaci obsaženy hlavičkové soubory, takže je znemožněna tvorba aplikací v jazyce C. Knihovna jazyka C je v unixových systémech považována za součást operačního systému. Funkce jazyka C, včetně těch ze standardu ISO C, jsou často používány programy i operačním systémem, tím pádem by systémy s unixovým jádrem při absenci knihovny jazyka C nefungovaly.

Na systémech Microsoft Windows jádro dynamických knihoven (DLL) neobsahuje standardní knihovnu jazyka C a ta je obsažena zvlášť v jednotlivých kompilátorech. Programy vytvořené v programovacím jazyce C jsou buď staticky propojené s knihovnou jazyka C nebo jsou propojené s dynamickou verzí knihovny distribuovanou přímo s programem.

Seznam dalších nejznámějších implementací:

Reference[editovat | editovat zdroj]

V tomto článku byl použit překlad textu z článku C standard library na anglické Wikipedii.

  1. Other built-in functions provided by GCC, GCC Manual
  2. Re: Does Newlib support mmu-less CPUs?

Související články[editovat | editovat zdroj]