Standardní knihovna of C je nyní standardizovaná sbírku záhlaví a rutin používaných při provádění běžných operací, jako je například vstup / výstup a řídící řetězce v jazyce C. Na rozdíl od jiných jazyků, jako je Pascal a PL / I , C neobsahuje klíčová slova pro tyto úkoly , takže téměř všechny programy napsané v jazyce C používají standardní knihovnu, i když jen k zobrazení výsledku.
Název a podpis („prototyp“ v C) každé funkce jsou popsány v záhlavích, která jsou součástí zdrojového kódu , zatímco objektový kód funkcí je oddělen v softwarové knihovně , která bude propojena pouze se zdrojovým kódem . Zbytek programu pouze tehdy, když spojuje . Název a jmenný prostor hlaviček se staly běžnými. Každá hlavička je nejčastěji samostatný soubor , ale organizace implementací zůstává různorodá. Standardní knihovna původně přišla s kompilátorem , ale dnes je často součástí operačního systému . V systémech Unix se obvykle nachází v adresáři /usr/lib/a je pojmenován po libc.anebo libc.so ; hlavičkové soubory jsou v adresáři /usr/include. Kompilátor však vždy ví, kde jsou tyto soubory umístěny, takže to není třeba říkat.
V systému Linux se obvykle používá knihovna glibc ; v systému Windows se obvykle nazývá standardní knihovna Visual C ++MSVCR*.dll , protože je k dispozici nezávisle na použitém kompilátoru C. Protože překladače jazyka C často nabízejí více funkcí než ty, které specifikují normy ISO a POSIX C , je standardní knihovna dodávaná s konkrétním překladačem špatně kompatibilní se standardními knihovnami jiných překladačů pro funkce, které nejsou standardizovány.
Zkušenosti ukazují, že většina standardní knihovny C byla dobře navržena. Některé části s odstupem času se však zdají být chybami. Funkce čtení řádku getsa použití scanfke čtení vstupních řetězců jsou zdrojem mnoha přetečení vyrovnávací paměti a většina průvodců programováním doporučuje vyhnout se jejich použití. Další oldie je strtok, funkce navržená jako primitivní lexikální analyzátor, ale která je docela „křehká“ a obtížně použitelná. Nakonec je správa dat a časů primitivní, zejména s virtuální nemožností správy časových pásem.
Unix a programovací jazyk C byly vytvořeny laboratořemi AT & T a Bell (Bell Laboratories společnosti AT&T) na začátku 70. let . Primitivní jazyk C neposkytl vestavěné funkce, jako je I / O operací (na rozdíl od klasických jazyků, jako je Pascal a Fortran ). V průběhu času komunity uživatelů C sdílely nápady a implementace toho, co nyní nazýváme standardní knihovnou C, aby tyto funkce poskytly. Mnoho z těchto myšlenek bylo začleněno do standardizované definice programovacího jazyka C.
V 70. letech se C stala populární. Mnoho univerzit a organizací vytvořilo pro své projekty vlastní varianty tohoto jazyka. V 80. letech se objevily problémy s kompatibilitou mezi různými implementacemi C.
V roce 1983 American National Standards Institute (ANSI) vytvořený výbor stanovit standardní specifikaci pro C, známý jako „ANSI C“. Tato práce vyvrcholila vytvořením standardu C89 v roce 1989 . Část výsledného standardu byla sada funkcí knihovny nazývá standardní ANSI C knihovny ( ANSI C standardní knihovna ). Tato norma se stala mezinárodní normou v roce 1990 a je známá také jako ISO C (ISO C) .
Pozdější revize normy ISO C přidaly do knihovny nové funkce a záhlaví. Podpora těchto rozšíření se liší podle implementace. Headers <iso646.h>, <wchar.h>a <wctype.h>byla přidána s normativní změnou 1 ( Normativní změna 1 ), dále zkrácenou změnou 1 , která je dodatkem ke standardu C ratifikovanému v roce 1995 . Záhlaví <complex.h>, <fenv.h>, <inttypes.h>, <stdbool.h>, <stdint.h>a <tgmath.h>byly přidány s C99, revize standardu C, publikované v roce 1999 .
Knihovna standardů ISO C se skládá z 24 hlaviček, které lze zahrnout do programátorského projektu s jedinou směrnicí. Každá hlavička obsahuje prototypy funkcí, definice typů a makra. Obsah těchto záhlaví je popsán níže.
Ve srovnání s jinými jazyky (např. Java ) je standardní ISO knihovna C malá. Poskytuje základní sadu matematiky, manipulace s řetězci , převod typů a funkce vstupu a výstupu souboru a terminálu. Nezahrnuje standardní základnu „typů kontejnerů“ ani standardní knihovnu šablon v jazyce C ++ . Ponechává stranou grafická uživatelská rozhraní (GUI), síťové nástroje, synchronizační funkce mezi úkoly a množství dalších funkcí, které Java standardně poskytuje. Hlavní výhodou malé standardní knihovny je, že je mnohem snazší poskytnout pracovní prostředí pro C ISO než pro jiné jazyky, a portování aplikací v jazyce C na nové platformy je proto relativně rychlé.
Mnoho dalších knihoven bylo napsáno s cílem vyvinout funkčnost ekvivalentní funkcím poskytovaným jinými jazyky v jejich standardní knihovně. Například navrhované desktopové prostředí GNOME vyvinulo Box Tools GIMP (GIMP ToolKit, GTK) a GLib , knihovnu, která obsahuje kontejnery datových struktur, a existuje mnoho dalších známých vlastností. Z této řady dostupných knihoven ukázaly některé sady nástrojů v průběhu času vynikající schopnosti. Hlavní nevýhodou je, že často spolu příliš dobře nefungují, programátoři jsou často nuceni žonglovat s několika různými knihovnami a některé funkce mohou být v různých formách pod každou konkrétní platformou, někdy dokonce i v rámci jedné důležité software.
C ++ programovací jazyk převezme funkci standardní knihovny ISO C, ale provádí několik změn, například transformaci jména hlaviček z <xxx.h>k <cxxx>(ovšem názvy ve stylu C jsou stále k dispozici, i když zastaralé) a umístěte všechny identifikátory do jmenného prostoru (jmenného prostoru) std.