C-Standard-Bibliothek

Die C-Standard-Bibliothek (englisch C standard library, auch bekannt als libc) ist die Standardbibliothek der Programmiersprache C.

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 im Embedded-Bereich häufig antrifft, nur eine festgelegte Untermenge der Standardbibliothek anbieten, um standardkonform zu sein.

Aufbau

Funktionsprototypen, Makros, Typdeklarationen und weitere Informationen sind in sogenannten Header-Dateien hinterlegt, die der Programmierer nach Bedarf mit Hilfe des C-Präprozessors in den Quelltext seines Programms einbindet, um dem Compiler 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ält als ob. Die tatsächliche Implementierung der Funktionen ist meist in eine Programmbibliothek 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 etwa gcc, die die auf dem System vorhandene Bibliothek benutzen. Compiler und System-Standardbibliothek zusammen bilden hier das hosted environment.

Umfang

Die C-Standard-Bibliothek enthält etwa 200 häufig benötigte Funktionen für Ein- und Ausgabe, mathematische Operationen, Verarbeitung von Zeichenketten, Speicherverwaltung und andere Bereiche. C verfügt, anders als traditionelle Sprachen (vor allem Pascal und Fortran), über keine eingebauten komplexen Funktionalitäten für z. B. Ein- und Ausgabeoperationen. Diese müssen daher von Funktionsbibliotheken zur Verfügung gestellt werden.

Im Vergleich zu den Bibliotheken anderer Sprachen, namentlich zum Beispiel Java, ist die C-Standard-Bibliothek minimalistisch. Sie stellt nur einen grundlegenden Satz an mathematischen Funktionen, Funktionen zur Zeichenkettenmanipulation, Typkonvertierung sowie datei- und konsolenbasierter Ein- und Ausgabe zur Verfügung. Sie stellt weder genormte Container-Datentypen zur Verfügung, wie es die C++-Standardbibliothek tut, noch bietet sie Unterstützung für grafische 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 die Portierung von C auf eine neue Plattform 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 Eingabefunktion gets() beispielsweise ist die Quelle vieler Pufferü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 älteren Sprachstandard implementieren, nicht unterstützt.

Entstehung

Da C, anders als andere traditionelle Sprachen wie Pascal oder Fortran, ü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 und Implementierungen für immer wieder genutzte Funktionen untereinander austauschten. Daraus entstanden im Laufe der Zeit umfangreiche Funktionsbibliotheken, die später mit als Grundlage für die Normung der Sprache C dienten.

C wurde in den frühen 1970er Jahren von Dennis Ritchie an den Bell Laboratories zur Programmierung des Betriebssystems Unix 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 bald Kompatibilitätsprobleme gab. 1983 formierte das American National Standards Institute (ANSI) ein Komitee, das ein genormtes C definieren sollte. Im Dezember 1989 waren die Arbeiten am Sprachstandard ANSI X3.159-1989 Programming Language C („C89“) abgeschlossen, der auch die C-Standard-Bibliothek umfasste. Ein Jahr später wurde der Standard von der ISO als internationale Norm ISO/IEC 9899:1990 („C90“) übernommen. Es folgten weitere Revisionen, siehe auch: Varianten der Programmiersprache C.

Header-Dateien

Von den jeweiligen Versionen der Norm werden folgende Header-Dateien definiert:

C89/C90
assert.hAssertions
ctype.hTests auf bestimmte Zeichentypen
errno.hCodes von Systemfehlern
float.hAngaben zu den Wertbereichen von Gleitkommazahlen
limits.hAngaben zu Beschränkungen des verwendeten Systems
locale.hEinstellungen des Gebietsschemas
math.hmathematische Funktionen
setjmp.herweiterte Sprungfunktionen
signal.hSignalbehandlung
stdarg.hArgumentbehandlung für variadische Funktionen
stddef.hzusätzliche Typdefinitionen
stdio.hEin- und Ausgabe
stdlib.hvermischte Standardfunktionen, u. a. Speicherverwaltung
string.hZeichenkettenoperationen
time.hDatum und Uhrzeit
Neu in C95 (auch: „NA1“)
iso646.halternative Schreibweisen für logische und bitweise Operatoren
wchar.hUnterstützung für Unicode-Zeichen
wctype.hwie ctype.h, für Unicode-Zeichen
Neu in C99[1]
complex.hKomplexe Zahlen
fenv.hEinstellungen für das Rechnen mit Gleitkommazahlen
inttypes.hKonvertierungs- und Formatierungsfunktionen für erweiterte Ganzzahltypen
stdbool.hUnterstützung für Boolesche Variablen
stdint.hplattformunabhängige Definition von Ganzzahltypen
tgmath.htypgenerische Makros für mathematische Funktionen
Neu in C11
stdalign.hMakros für die Speicherausrichtung von Objekten
stdatomic.hTypen und Makros für atomare Operationen zwischen Threads
stdnoreturn.hDefinition des No-Return-Makros
threads.hUnterstützung für Threads, Mutexes und Monitore
uchar.hUnterstützung für UTF-16- und UTF-32-kodierte Unicode-Zeichen

Freistehende Implementierungen

Freistehende Implementierungen müssen nur mindestens die folgenden Header-Dateien zur Verfügung stellen:

HeaderC89/C90C95C99
float.hJaJaJa
iso646.h JaJa
limits.hJaJaJa
stdarg.hJaJaJa
stdbool.h  Ja
stddef.hJaJaJa
stdint.h  Ja

Implementierungen der C-Standard-Bibliothek

  • Die glibc ist eine freie (LGPL) Implementierung der C-Standard-Bibliothek, die im GNU-Projekt mit dem gcc-Compiler entwickelt wird. Sie ist daher besonders im Unix-Raum weit verbreitet.
  • Ebenfalls frei (unter einer BSD-Lizenz) verfügbar sind die C-Bibliothek-Implementationen der BSD-Betriebssysteme FreeBSD, NetBSD und OpenBSD. Diese stellen moderne Weiterentwicklungen der ursprünglich von der CSRG bereitgestellten C-Bibliothek dar.
  • Programme für Windows nutzen häufig die von der „Microsoft Visual C++“-Laufzeitumgebung bereitgestellte Implementierung (msvcrt.dll), die keinen besonderen Namen trägt, da sie nicht separat verfügbar ist.
  • Als Alternativen stehen unter anderem auch weniger umfangreiche Implementierungen zur Verfügung, die besonders auf eingebetteten Systemen Verwendung finden, z. B. eglibc und die speziell für µClinux entwickelte uClibc oder diet libc.
  • Die Klibc ist eine freie (GPL oder BSD-Lizenz) Minimalimplementierung der C-Standard-Bibliothek von Hans Peter Anvin, die hauptsächlich während des Startvorgangs vom Linux-Kernel genutzt wird.
  • Für die Programmierung von „TI MSP430“-Mikrocontrollern von Texas Instruments kann die msp430-libc verwendet werden.
  • Bionic ist eine freie (BSD-Lizenz) Implementierung von Google für das Betriebssystem Android.
  • Newlib ist eine zur Erstellung von Projekten im Bereich Eingebettete Systeme optimierte Implementierung der C-Standard-Bibliothek.
  • musl ist eine für statisches Linken optimierte Implementierung der C-Standard-Bibliothek.

Literatur

  • P. J. Plauger: The Standard C Library. Prentice Hall, 1992, ISBN 0-13-131509-9.
  • British Standards Institute (Hrsg.): The C Standard - Incorporating TC1 - BS ISO/IEC 9899:1999. John Wiley & Sons, 2003, ISBN 0-470-84573-2.

Weblinks

Einzelnachweise

  1. Rationale for International Standard – Programming Languages – C. (PDF; 877 kB) Abgerufen am 12. September 2010 (englisch).