„C-Standard-Bibliothek“ – Versionsunterschied

[ungesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
Keine Bearbeitungszusammenfassung
 
(41 dazwischenliegende Versionen von 30 Benutzern werden nicht angezeigt)
Zeile 1:
Die '''C-Standard-Bibliothek''' ({{enS|C standard library}}, auch bekannt als ''libc'') ist die [[Standardbibliothek]] der [[Programmiersprache]] [[C (Programmiersprache)|C]].
Die '''Standard C Library''' ist eine [[Standardbibliothek|genormte Funktionsbibliothek]] für die [[C (Programmiersprache)|Programmiersprache C]], die etwa 200 häufig benötigte [[Funktion (Programmierung)|Funktionen]] für [[Eingabe und Ausgabe|Ein- und Ausgabe]], [[Funktion (Mathematik)|mathematische Operationen]], Verarbeitung von [[Zeichenkette]]n, [[Speicherverwaltung]] und andere Bereiche enthält. C verfügt, anders als traditionelle Sprachen (vor allem [[Pascal (Programmiersprache)|Pascal]] und [[Fortran]]), über keine eingebauten komplexen Funktionalitäten für z. B. Ein- und Ausgabeoperationen. Diese müssen daher von [[Programmbibliothek|Funktionsbibliotheken]] zur Verfügung gestellt werden.
 
In jeder standardkonformen betriebssystemgestützten Implementierung (''hosted environment'') der Programmiersprache C muss die Standard C Library in vollem Umfang vorhanden sein. Hingegen müssen freistehende Umgebungen (''freestanding environment''), wie man sie beispielsweise im [[Eingebettetes System|Embedded]]-Bereich häufig antrifft, nur eine festgelegte Untermenge der Standardbibliothek anbieten, um standardkonform zu sein.
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 [[Eingebettetes System|Embedded]]-Bereich häufig antrifft, nur eine festgelegte Untermenge der Standardbibliothek anbieten, um standardkonform zu sein.
 
== Aufbau ==
[[Funktionsprototyp]]en, [[Makro]]s, [[Datentyp|Typdeklarationen]] und weitere Informationen sind in sogenannten [[Header-Datei|Headern]]en hinterlegt, die der Programmierer nach Bedarf mit Hilfe des [[C-Präprozessor]]s in den [[Quelltext]] seines Programms einbindet, um dem [[Compiler]] mitzuteilen, wie diese Funktionen zu verwenden sind. Üblicherweise handelt es sich bei den HeadernHeader-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 dereiner Header-Datei sind heute genormt, die Organisation der Bibliotheken variiert jedoch je nach Anbieter. Die Standard C Library-Standard-Bibliothek wird meist vom Compilerhersteller implementiert, es gibt jedoch auch „nackte“ Compiler, wie etwa [[GNU Compiler Collection|gcc]], die die auf dem System vorhandene Bibliothek benutzen. Compiler und System-Standardbibliothek zusammen bilden hier das ''hosted environment''.
 
== Umfang ==
Im Vergleich zu den Bibliotheken anderer Sprachen, namentlich zum Beispiel [[Java (Programmiersprache)|Java]], ist die Standard C Library minimalistisch. Sie stellt nur einen grundlegenden Satz an mathematischen Funktionen, Funktionen zur [[Zeichenkette]]nmanipulation, Typkonvertierung sowie datei- und konsolenbasierter Ein- und Ausgabe zur Verfügung. Sie stellt keine genormten [[Container (Informatik)|Container-Datentypen]] zur Verfügung, wie es die [[C++-Standardbibliothek]] tut, noch bietet sie Unterstützung für [[grafische Benutzeroberfläche]]n, [[Rechnernetz|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 (Computer)|Plattform]] vergleichsweise einfach ist.
 
Die C-Standard-Bibliothek enthält etwa 200 häufig benötigte [[Funktion (Programmierung)|Funktionen]] für [[Eingabe und Ausgabe|Ein- und Ausgabe]], [[Funktion (Mathematik)|mathematische Operationen]], Verarbeitung von [[Zeichenkette]]n, [[Speicherverwaltung]] und andere Bereiche. C verfügt, anders als traditionelle Sprachen (vor allem [[Pascal (Programmiersprache)|Pascal]] und [[Fortran]]), über keine eingebauten komplexen Funktionalitäten für z. B. Ein- und Ausgabeoperationen. Diese müssen daher von [[Programmbibliothek|Funktionsbibliotheken]] zur Verfügung gestellt werden.
Der größte Teil der Standard C Library hat sich als sehr vorausschauend entwickelt herausgestellt. Dennoch gelten einige Teile heute als Fehler, wurden aber aufgrund verbreiteter Nutzung aufgenommen. Die Eingabefunktion <code>gets()</code> beispielsweise ist die Quelle vieler [[Pufferüberlauf|Pufferüberläufe]] und wurde deswegen auch aus der Bibliothek des neuesten C Standards C11 entfernt.
 
Im Vergleich zu den Bibliotheken anderer Sprachen, namentlich zum Beispiel [[Java (Programmiersprache)|Java]], ist die C-Standard-Bibliothek minimalistisch. Sie stellt nur einen grundlegenden Satz an mathematischen Funktionen, Funktionen zur [[Zeichenkette]]nmanipulation, Typkonvertierung sowie datei- und konsolenbasierter Ein- und Ausgabe zur Verfügung. Sie stellt weder genormte [[Container (Informatik)|Container-Datentypen]] zur Verfügung, wie es die [[C++-Standardbibliothek]] tut, noch bietet sie Unterstützung für [[grafische Benutzeroberfläche]]n, [[Rechnernetz|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 (Software)|Portierung]] von C auf eine neue [[Plattform (Computer)|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 <code>gets()</code> beispielsweise ist die Quelle vieler [[Pufferüberlauf|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 altenälteren [[Varianten der Programmiersprache C|Sprachstandard]] implementieren, nicht unterstützt.
 
== Entstehung ==
Da C, anders als andere traditionelle Sprachen wie [[Pascal (Programmiersprache)|Pascal]] oder [[Fortran]], über keine eingebauten komplexen Funktionalitäten z.&nbsp;B. für Ein- und Ausgabeoperationen verfügt, bildeten sich in der Phase vor der Standardisierung Zirkel von C-Programmierern, die ihre Ideen und [[Implementierung]]en für immer wieder genutzte Funktionen untereinander austauschten. Daraus entstanden im Laufe der Zeit umfangreiche [[Programmbibliothek|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 [[UNIXUnix]] 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ät (Technik)|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 Standard C Library-Standard-Bibliothek umfasste. Ein Jahr später wurde der Standard von der [[Internationale Organisation für Normung|ISO]] als internationale Norm ''ISO/IEC 9899:1990'' („C90“) übernommen. Es folgten weitere Revisionen, siehe auch: [[Varianten der Programmiersprache &nbsp;C]].
 
== Header-Dateien ==
Von den jeweiligen Versionen der Norm werden folgende Header-Dateien definiert:
 
{| class="prettytable"
{| class="wikitable"
! colspan="2" style="text-align:left" class="hintergrundfarbe5" | C89/C90
|- class="hintergrundfarbe5"
!colspan="2" style="text-align:left"| C89/C90
|-
| <code>assert.h</code> || [[Assertion (Informatik)|Assertions]]
Zeile 34 ⟶ 40:
| <code>locale.h</code> || Einstellungen des [[Locale|Gebietsschemas]]
|-
| <code>[[math.h]]</code> || Mathematischemathematische Funktionen
|-
| <code>setjmp.h</code> || erweiterte [[Sprunganweisung|Sprungfunktionen]]
|-
| <code>signal.h</code> || [[Signal (ComputerUnix)|Signalbehandlung]]
|-
| <code>stdarg.h</code> || Argumentbehandlung für [[variadische Funktion]]en
Zeile 46 ⟶ 52:
| <code>stdio.h</code> || Ein- und Ausgabe
|-
| <code>stdlib.h</code> || vermischte Standardfunktionen, u.&nbsp;a. Speicherverwaltung
|-
| <code>string.h</code> || [[Zeichenkette]]noperationen
|-
| <code>time.h</code> || Datum und Uhrzeit
|- class="hintergrundfarbe5"
!colspan="2" style="text-align:left"| Neu in C95 (auch: „NA1“)
|-
| <code>iso646.h</code> || alternative Schreibweisen für [[Logischer Operator|logische]] und [[Bitweiser Operator|bitweise Operatoren]]
! colspan="2" style="text-align:left" class="hintergrundfarbe5" | Neu in C95
|-
| <code>iso646.h</code> || Alternative Schreibweisen für [[Logischer Operator|logische]] und [[Bitweiser Operator| bitweise Operatoren]]
|-
| <code>wchar.h</code> || Unterstützung für [[Unicode]]-Zeichen
|-
| <code>wctype.h</code> || wie <code>ctype.h</code>, für Unicode-Zeichen
|- class="hintergrundfarbe5"
|-
! colspan="2" style="text-align:left" class="hintergrundfarbe5" | Neu in C99 <ref>{{Internetquelle | url=httphttps://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf | titel=Rationale for International Standard - Programming Languages - C | format=PDF; | seiten=15 (Abschnitt 5.1.1.2)877&nbsp;kB | zugriff=2010-09-12 | sprache=en }}</ref>
|-
| <code>complex.h</code> || [[Komplexe Zahl]]en
Zeile 73 ⟶ 79:
|-
| <code>tgmath.h</code> || typgenerische Makros für mathematische Funktionen
|- class="hintergrundfarbe5"
!colspan="2" style="text-align:left"| Neu in C11
|-
| <code>stdalign.h</code> || Makros für die [[Speicherausrichtung]] von Objekten
|-
| <code>stdatomic.h</code> || Typen und Makros für [[Atomare Operation|atomare Operationen]] zwischen Threads
|-
| <code>stdnoreturn.h</code> || Definition des No-Return-Makros
|-
| <code>threads.h</code> || Unterstützung für [[Thread (Informatik)|Threads]], [[Mutex]]es und [[Monitor (Informatik)|Monitore]]
|-
| <code>uchar.h</code> || Unterstü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:
 
{| class="prettytable"
{| class="wikitable"
! class="hintergrundfarbe5" | C89/C90 ||class="hintergrundfarbe5" | C95 ||class="hintergrundfarbe5" | C99
|- class="hintergrundfarbe5"
! Header || C89/C90 || C95 || C99
|-
| <code>float.h</code> || <code>float.h</code>Ja || Ja || <code>float.h</code>Ja
|-
| &nbsp; || <code>iso646.h</code> || <code>iso646.h</code>&nbsp; || Ja || Ja
|-
| <code>limits.h</code> || <code>limits.h</code>Ja || Ja || <code>limits.h</code>Ja
|-
| <code>stdarg.h</code> || <code>stdarg.h</code>Ja || Ja || <code>stdarg.h</code>Ja
|-
| <code>stdbool.h</code> || &nbsp; || &nbsp; || <code>stdbool.h</code>Ja
|-
| <code>stddef.h</code> || <code>stddef.h</code>Ja || Ja || <code>stddef.h</code>Ja
|-
| <code>stdint.h</code> || &nbsp; || &nbsp; || <code>stdint.h</code>Ja
|}
 
== Implementierungen der Standard C Library-Standard-Bibliothek ==
* Die [[GNU-C-Bibliothek|glibc]] ist eine freie ([[GNU Lesser General Public License|LGPL]]) Implementierung der C-Standard-Bibliothek, die im [[GNU-Projekt]] mit dem [[GNU Compiler Collection|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 [[Berkeley Software Distribution|BSD]]-Betriebssysteme [[FreeBSD]], [[NetBSD]] und [[OpenBSD]]. Diese stellen moderne Weiterentwicklungen der ursprünglich von der [[Computer Systems Research Group|CSRG]] bereitgestellten C-Bibliothek dar.
* Programme für [[Microsoft Windows|Windows]] nutzen häufig die von der „[[Microsoft Visual C++]]“-[[Laufzeitumgebung]] bereitgestellte Implementierung (<span style="font-family:monospace;">msvcrt.dll</span>), 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 [[Eingebettetes System|eingebetteten Systemen]] Verwendung finden, z.&nbsp;B. [[Glibc#EGLIBC Fork|eglibc]] und die speziell für [[µClinux]] entwickelte [[uClibc]] oder [[diet libc]].
* Die [[Klibc]] ist eine freie ([[GNU General Public License|GPL]] oder [[BSD-Lizenz]]) Minimalimplementierung der C-Standard-Bibliothek von [[Hans Peter Anvin]], die hauptsächlich während des [[Booten|Startvorgangs]] vom [[Linux (Kernel)|Linux-Kernel]] genutzt wird.
* Für die Programmierung von „[[TI MSP430]]“-Mikrocontrollern von Texas Instruments kann die [[msp430-libc]] verwendet werden.
* [[Bionic (Software)|Bionic]] ist eine freie ([[BSD-Lizenz]]) Implementierung von [[Google LLC|Google]] für das [[Betriebssystem]] [[Android (Betriebssystem)|Android]].
* [[Newlib]] ist eine zur Erstellung von Projekten im Bereich [[Eingebettete Systeme]] optimierte Implementierung der C-Standard-Bibliothek.
* [[musl]] ist eine für [[Linker (Computerprogramm)#Statisches Linken|statisches Linken]] optimierte Implementierung der C-Standard-Bibliothek.
 
== Literatur ==
* Die [[Glibc]] ist eine freie ([[GNU Lesser General Public License|LGPL]]) Implementierung der Standard C Library, die im [[GNU-Projekt]] mit dem [[GNU Compiler Collection|gcc]]-Compiler entwickelt wird. Sie ist daher besonders im [[Unix]]-Raum weit verbreitet.
* {{Literatur
* Ebenfalls frei (unter einer [[BSD-Lizenz]]) verfügbar sind die C-Library-Implementationen der [[Berkeley Software Distribution|BSD]] Betriebssysteme [[FreeBSD]], [[NetBSD]] und [[OpenBSD]]. Diese stellen moderne Weiterentwicklungen der ursprünglich von der [[Computer Systems Research Group|CSRG]] bereitgestellten C Library dar.
|Herausgeber=British Standards Institute
* Programme für [[Microsoft 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.
|Titel=The C Standard - Incorporating TC1 - BS ISO/IEC 9899:1999
* Als Alternativen stehen unter anderem auch weniger umfangreiche Implementierungen zur Verfügung, die besonders auf [[Eingebettetes System|Embedded Systemen]] Verwendung finden, z.&nbsp;B. [[Glibc#EGLIBC_Fork|eglibc]] und die speziell für [[ΜClinux|µClinux]] entwickelte [[uClibc]] oder [[diet libc]].
|Verlag=John Wiley & Sons
* Für die Programmierung von [[TI MSP430]]-Mikrocontrollern von Texas Instruments kann die [[msp430-libc]] verwendet werden.
|Jahr=2003
|ISBN=0-470-84573-2}}
* [[P. J. Plauger]]: ''The Standard C Library''. Prentice Hall, 1992, ISBN 0-13-131509-9.
 
== Weblinks ==
* {{Internetquelle | url=https://www2.hs-fulda.de/~klingebiel/c-stdlib/index.htm | titel=Übersicht über die C Standard-Bibliothek | zugriff=2010-09-21| kommentar=C89}}
* {{Internetquelle | url=https://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf | titel=ISO/IEC 9899:1999 (C99) mit TC1, TC2 und TC3 | format=PDF; 3,6&nbsp;MB | zugriff=2010-09-12| sprache=en | kommentar=nicht-normatives Arbeitsdokument}}
* {{Internetquelle | url=https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf | titel=Rationale für C99, Revision 5.10 | format=PDF; 877&nbsp;kB | zugriff=2010-09-12| sprache=en}}
* {{Internetquelle | url=https://code-reference.com/c | titel=C Library | zugriff=2012-11-26| sprache=en}}
 
== Einzelnachweise ==
<references />
 
[[Kategorie:C-Bibliothek]]
== Weblinks ==
*{{Internetquelle | url=http://www.fh-fulda.de/~klingebiel/c-stdlib/index.htm | titel=Übersicht über die C-Standard-Bibliothek | zugriff=2010-09-21 | kommentar=C89 }}
*{{Internetquelle | url=http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf | titel=ISO/IEC 9899:1999 (C99) mit TC1, TC2 und TC3 | format=PDF | zugriff=2010-09-12 | sprache=en | kommentar=nicht-normatives Arbeitsdokument }}
*{{Internetquelle | url=http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf | titel=Rationale für C99, Revision 5.10 | format=PDF | zugriff=2010-09-12 | sprache=en }}
 
== Literatur ==
{{Literatur
| Herausgeber=British Standards Institute
| Titel=The C Standard - Incorporating TC1 - BS ISO/IEC 9899:1999
| Verlag=John Wiley & Sons
| Jahr=2003
| ISBN=0-470-84573-2
| Kommentar=
}}
 
[[Kategorie:Programmiersprache C]]
[[Kategorie:Bibliothek (Programmierung)]]
 
[[be-x-old:Стандартная бібліятэка C]]
[[ca:C standard library]]
[[cs:Standardní knihovna jazyka C]]
[[da:Libc]]
[[el:C Πρότυπη βιβλιοθήκη]]
[[en:C standard library]]
[[es:Biblioteca estándar de C]]
[[et:C standardteek]]
[[fr:Bibliothèque standard de C]]
[[it:Libreria standard del C]]
[[ja:標準Cライブラリ]]
[[ko:C 표준 라이브러리]]
[[nl:Standaard C-bibliotheek]]
[[pl:Biblioteka standardowa języka C]]
[[pt:Biblioteca padrão do C]]
[[ru:Стандартная библиотека языка Си]]
[[tr:C standart kütüphanesi]]
[[vi:Thư viện chuẩn C]]
[[zh:C標準函式庫]]