Standardní knihovna jazyka C

Z Wikipedie, otevřené encyklopedie
Standardní hlavičkové soubory

Standardní knihovna jazyka C je v informatice implementace standardní knihovny podle standardu ANSI C.[1] Je podmnožinou POSIX specifikace knihovny jazyka C, která byla vytvořena ve stejné době.[2][3] Od chvíle, kdy bylo ANSI C přijato jako ISO standard,[4] je také nazývána jako knihovna ISO C (anglicky ISO C library).

Standardní knihovna jazyka C poskytuje makra, definice datových typů a funkcí pro práci s textovými řetězci, matematické výpočty, práci se vstupy a výstupy, správu paměti a několik dalších služeb operačního systému. Zahrnuje hlavičkové soubory programovacího 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 jazyka 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).
<time.h> 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)[5] 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 – 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. ISO/IEC (1999). ISO/IEC 9899:1999(E): Programming Languages - C §7.19.1 para 1
  2. The GNU C Library – Introduction [online]. [cit. 2013-12-05]. Dostupné online. 
  3. Difference between C standard library and C POSIX library [online]. 2012 [cit. 2015-03-04]. Dostupné online. 
  4. C Standards [online]. Keil [cit. 2011-11-24]. Dostupné online. 
  5. Other built-in functions provided by GCC, GCC Manual
  6. Re: Does Newlib support mmu-less CPUs?. www.cygwin.com [online]. [cit. 2009-06-11]. Dostupné v archivu pořízeném dne 2008-11-22. 

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