Standardní knihovna jazyka C
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í:
- BSD libc – implementace pro operační systémy BSD
- GNU C Library – nejběžnější implementace používaná unixovými systémy, jako je například Linux
- dietlibc – alternativní implementace glibc zaměřená na malou velikost
- uClibc – implementace pro Linuxové vestavěné systémy (bez MMU)
- Dinkum C99 Library od Dinkumware – implementace od Dinkumware
- Microsoft C Run-time Library – nejvíce komerčně licencovaná knihovna
- Newlib – implementace pro vestavěné systémy (bez MMU)[6]
- klibc – implementace primárně určená pro použití v jádře Linuxu (kernel-libc)
- EGLIBC – varianta glibc pro vestavěné systémy
Reference[editovat | editovat zdroj]
V tomto článku byl použit překlad textu z článku C standard library na anglické Wikipedii.
- ↑ ISO/IEC (1999). ISO/IEC 9899:1999(E): Programming Languages - C §7.19.1 para 1
- ↑ The GNU C Library – Introduction [online]. [cit. 2013-12-05]. Dostupné online.
- ↑ Difference between C standard library and C POSIX library [online]. 2012 [cit. 2015-03-04]. Dostupné online.
- ↑ C Standards [online]. Keil [cit. 2011-11-24]. Dostupné online.
- ↑ Other built-in functions provided by GCC, GCC Manual
- ↑ 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.