„C-Standard-Bibliothek“ – Versionsunterschied
[ungesichtete Version] | [gesichtete Version] |
Inhalt gelöscht Inhalt hinzugefügt
Keine Bearbeitungszusammenfassung |
Aka (Diskussion | Beiträge) K https, Links optimiert | viele Tippfehler in anderen Artikeln – Helfer gesucht |
||
(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]].
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
== Umfang ==
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.
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
== Entstehung ==
Da C, anders als andere traditionelle Sprachen wie [[Pascal (Programmiersprache)|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 [[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 [[
== Header-Dateien ==
Von den jeweiligen Versionen der Norm werden folgende Header-Dateien definiert:
{| class="wikitable"
|- 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> ||
|-
| <code>setjmp.h</code> || erweiterte [[Sprunganweisung|Sprungfunktionen]]
|-
| <code>signal.h</code> || [[Signal (
|-
| <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. 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]]
|-
| <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"
!
|-
| <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="wikitable"
|- class="hintergrundfarbe5"
! Header || C89/C90 || C95 || C99
|-
| <code>float.h</code> ||
|-
|-
| <code>limits.h</code> ||
|-
| <code>stdarg.h</code> ||
|-
| <code>stdbool.h</code> ||
|-
| <code>stddef.h</code> ||
|-
| <code>stdint.h</code> ||
|}
== Implementierungen der
* 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. 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 ==
* {{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}}
* [[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 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 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]]
|