Standardní knihovna jazyka C
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í hlavičkové soubory |
---|
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
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
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
<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
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
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
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
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. (anglicky)
- Difference between C standard library and C POSIX library [online]. 2012 [cit. 2015-03-04]. Dostupné online. (anglicky)
- C Standards [online]. Keil [cit. 2011-11-24]. Dostupné online. (anglicky)
- 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.