DieC-Standard-Bibliothek (englischC standard library, auch bekannt alslibc) ist dieStandardbibliothek derProgrammierspracheC.
In jeder standardkonformen betriebssystemgestützten Implementierung(hosted environment) von C muss die C-Standard-Bibliothek in vollem Umfang vorhanden sein. Hingegen müssen freistehende Umgebungen(freestanding environment), wie man sie beispielsweise imEmbedded-Bereich häufig antrifft, nur eine festgelegte Untermenge der Standardbibliothek anbieten, um standardkonform zu sein.
Funktionsprototypen,Makros,Typdeklarationen und weitere Informationen sind in sogenanntenHeader-Dateien hinterlegt, die der Programmierer nach Bedarf mit Hilfe desC-Präprozessors in denQuelltext seines Programms einbindet, um demCompiler mitzuteilen, wie diese Funktionen zu verwenden sind. Üblicherweise handelt es sich bei den Header-Dateien um separate Dateien, allerdings verlangt dies der C-Standard nicht explizit: der Compilerhersteller muss lediglich dafür sorgen, dass sich seine C-Umgebung so verhältals ob. Die tatsächliche Implementierung der Funktionen ist meist in eineProgrammbibliothek ausgelagert. Namensgebung und Gültigkeitsbereich einer Header-Datei sind heute genormt, die Organisation der Bibliotheken variiert jedoch je nach Anbieter. Die C-Standard-Bibliothek wird meist vom Compilerhersteller implementiert, es gibt jedoch auch „nackte“ Compiler, wie etwagcc, die die auf dem System vorhandene Bibliothek benutzen. Compiler und System-Standardbibliothek zusammen bilden hier dashosted environment.
Die C-Standard-Bibliothek enthält etwa 200 häufig benötigteFunktionen fürEin- und Ausgabe,mathematische Operationen, Verarbeitung vonZeichenketten,Speicherverwaltung und andere Bereiche. C verfügt, anders als traditionelle Sprachen (vor allemPascal undFortran), über keine eingebauten komplexen Funktionalitäten für z. B. Ein- und Ausgabeoperationen. Diese müssen daher vonFunktionsbibliotheken zur Verfügung gestellt werden.
Im Vergleich zu den Bibliotheken anderer Sprachen, namentlich zum BeispielJava, ist die C-Standard-Bibliothek minimalistisch. Sie stellt nur einen grundlegenden Satz an mathematischen Funktionen, Funktionen zurZeichenkettenmanipulation, Typkonvertierung sowie datei- und konsolenbasierter Ein- und Ausgabe zur Verfügung. Sie stellt weder genormteContainer-Datentypen zur Verfügung, wie es dieC++-Standardbibliothek tut, noch bietet sie Unterstützung fürgrafische Benutzeroberflächen,Netzwerkfunktionalitäten und anderes, was in anderen Sprachen heute selbstverständlich vorhanden ist. Ein großer Vorteil der kleinen Standard-Bibliothek besteht jedoch darin, dass die Bereitstellung einer standardkonformen C-Implementation weit einfacher ist als bei anderen Sprachen und so diePortierung von C auf eine neuePlattform vergleichsweise einfach ist.
Der größte Teil der C-Standard-Bibliothek hat sich als sehr vorausschauend entwickelt herausgestellt. Dennoch gelten einige Teile heute als Fehler, wurden aber aufgrund verbreiteter Nutzung aufgenommen. Die Eingabefunktiongets() beispielsweise ist die Quelle vielerPufferüberläufe und wurde deswegen auch aus der Bibliothek des neuesten C-Standards C11 entfernt.
Die ISO-C-Standardbibliothek umfasst aktuell (ISO-C99) 24 Header-Dateien. Da einige Header-Dateien erst in neueren Revisionen dem C-Standard hinzugefügt wurden, werden sie von Compilern, die einen älterenSprachstandard implementieren, nicht unterstützt.
Da C, anders als andere traditionelle Sprachen wiePascal oderFortran, über keine eingebauten komplexen Funktionalitäten z. B. für Ein- und Ausgabeoperationen verfügt, bildeten sich in der Phase vor der Standardisierung Zirkel von C-Programmierern, die ihre Ideen undImplementierungen für immer wieder genutzte Funktionen untereinander austauschten. Daraus entstanden im Laufe der Zeit umfangreicheFunktionsbibliotheken, die später mit als Grundlage für die Normung der Sprache C dienten.
C wurde in den frühen 1970er Jahren vonDennis Ritchie an denBell Laboratories zur Programmierung des BetriebssystemsUnix entwickelt und gewann in den folgenden Jahren zunehmend an Popularität. Viele Universitäten und Organisationen entwickelten für ihre Projekte eigene Varianten der Sprache, so dass es zwischen den verschiedenen Implementierungen schon baldKompatibilitätsprobleme gab. 1983 formierte dasAmerican National Standards Institute (ANSI) ein Komitee, das ein genormtes C definieren sollte. Im Dezember 1989 waren die Arbeiten am SprachstandardANSI X3.159-1989 Programming Language C („C89“) abgeschlossen, der auch die C-Standard-Bibliothek umfasste. Ein Jahr später wurde der Standard von derISO als internationale NormISO/IEC 9899:1990 („C90“) übernommen. Es folgten weitere Revisionen, siehe auch:Varianten der Programmiersprache C.
Von den jeweiligen Versionen der Norm werden folgende Header-Dateien definiert:
| C89/C90 | |
|---|---|
assert.h | Assertions |
ctype.h | Tests auf bestimmte Zeichentypen |
errno.h | Codes von Systemfehlern |
float.h | Angaben zu den Wertbereichen vonGleitkommazahlen |
limits.h | Angaben zu Beschränkungen des verwendeten Systems |
locale.h | Einstellungen desGebietsschemas |
math.h | mathematische Funktionen |
setjmp.h | erweiterteSprungfunktionen |
signal.h | Signalbehandlung |
stdarg.h | Argumentbehandlung fürvariadische Funktionen |
stddef.h | zusätzliche Typdefinitionen |
stdio.h | Ein- und Ausgabe |
stdlib.h | vermischte Standardfunktionen, u. a. Speicherverwaltung |
string.h | Zeichenkettenoperationen |
time.h | Datum und Uhrzeit |
| Neu in C95 (auch: „NA1“) | |
iso646.h | alternative Schreibweisen fürlogische undbitweise Operatoren |
wchar.h | Unterstützung fürUnicode-Zeichen |
wctype.h | wiectype.h, für Unicode-Zeichen |
| Neu in C99[1] | |
complex.h | Komplexe Zahlen |
fenv.h | Einstellungen für das Rechnen mit Gleitkommazahlen |
inttypes.h | Konvertierungs- und Formatierungsfunktionen für erweiterteGanzzahltypen |
stdbool.h | Unterstützung fürBoolesche Variablen |
stdint.h | plattformunabhängige Definition von Ganzzahltypen |
tgmath.h | typgenerische Makros für mathematische Funktionen |
| Neu in C11 | |
stdalign.h | Makros für dieSpeicherausrichtung von Objekten |
stdatomic.h | Typen und Makros füratomare Operationen zwischen Threads |
stdnoreturn.h | Definition des No-Return-Makros |
threads.h | Unterstützung fürThreads,Mutexes undMonitore |
uchar.h | Unterstützung fürUTF-16- undUTF-32-kodierte Unicode-Zeichen |
Freistehende Implementierungen müssen nur mindestens die folgenden Header-Dateien zur Verfügung stellen:
| Header | C89/C90 | C95 | C99 |
|---|---|---|---|
float.h | Ja | Ja | Ja |
iso646.h | Ja | Ja | |
limits.h | Ja | Ja | Ja |
stdarg.h | Ja | Ja | Ja |
stdbool.h | Ja | ||
stddef.h | Ja | Ja | Ja |
stdint.h | Ja |