C standaard bibliotheek
De C-standaardbibliotheek ( Engelse C-standaardbibliotheek, ook bekend als libc) is de standaardbibliotheek van programmeertaal C.
In elke standaardconforme op het besturingssysteem gebaseerde implementatie (gehoste omgeving) van C, moet de C-standaardbibliotheek in zijn geheel aanwezig zijn. Aan de andere kant hoeven vrijstaande omgevingen, zoals die vaak worden aangetroffen in de embedded sector, slechts een gedefinieerde subset van de standaardbibliotheek te bieden om aan de normen te voldoen .
bouw
Functie- prototypes , macro's , typedeclaraties en andere informatie worden opgeslagen in zogenaamde header-bestanden , die de programmeur met behulp van de C-preprocessor in de broncode van zijn programma integreert , om de compiler te informeren hoe deze functies moeten worden uitgevoerd. gebruikt. De header-bestanden zijn meestal losse bestanden, maar de C-standaard vereist dit niet expliciet: de compilerfabrikant hoeft er alleen voor te zorgen dat zijn C-omgeving zich gedraagt alsof . De daadwerkelijke implementatie van de functies wordt meestal uitbesteed aan een programmabibliotheek . De naamgeving en reikwijdte van een headerbestand zijn tegenwoordig gestandaardiseerd, maar de organisatie van de bibliotheken varieert afhankelijk van de provider. De C-standaardbibliotheek wordt meestal geïmplementeerd door de fabrikant van de compiler, maar er zijn ook "kale" compilers, zoals gcc , die de bibliotheek gebruiken die op het systeem beschikbaar is. De compiler en de systeemstandaardbibliotheek vormen samen de gehoste omgeving .
domein
De C-standaardbibliotheek bevat ongeveer 200 veelgebruikte functies voor invoer en uitvoer , wiskundige bewerkingen , verwerking van tekenreeksen , geheugenbeheer en andere gebieden. In tegenstelling tot traditionele talen (vooral Pascal en Fortran ), heeft C geen ingebouwde complexe functionaliteiten voor b.v. B. Invoer- en uitvoerbewerkingen. Deze moeten daarom door functiebibliotheken ter beschikking worden gesteld.
Vergeleken met de bibliotheken van andere talen, namelijk Java bijvoorbeeld, is de C-standaardbibliotheek minimalistisch. Het biedt alleen een basisset van wiskundige functies, functies voor het manipuleren van tekenreeksen , typeconversie en invoer en uitvoer op basis van bestanden en consoles. Het biedt geen gestandaardiseerde containergegevenstypen , zoals de C++-standaardbibliotheek , en biedt ook geen ondersteuning voor grafische gebruikersinterfaces , netwerkfunctionaliteiten en andere dingen die tegenwoordig natuurlijk in andere talen beschikbaar zijn. Een groot voordeel van de kleine standaardbibliotheek is echter dat het aanbieden van een standaardconforme C-implementatie veel eenvoudiger is dan bij andere talen en dus is het overzetten van C naar een nieuw platform relatief eenvoudig.
Het grootste deel van de C-standaardbibliotheek is zeer toekomstgericht gebleken. Sommige onderdelen worden nu echter als fouten beschouwd, maar zijn vanwege het wijdverbreide gebruik opgenomen. De invoerfunctie gets()
bijvoorbeeld de bron van veel bufferoverlopen en is daarom verwijderd uit de bibliotheek van de nieuwste C-standaard C11.
De ISO-C-standaardbibliotheek omvat momenteel (ISO-C99) 24 headerbestanden. Omdat sommige header-bestanden zijn alleen de C standaard is toegevoegd in meer recente herzieningen, worden ze niet ondersteund door compilers dat een oudere implementeren taal standaard .
Verschijning
Aangezien C, in tegenstelling tot andere traditionele talen zoals Pascal of Fortran , geen ingebouwde complexe functionaliteiten heeft, b.v. B. voor input- en outputoperaties werden in de fase vóór standaardisatie kringen van C-programmeurs gevormd, die hun ideeën en implementaties verwisselden voor functies die steeds opnieuw werden gebruikt. Dit resulteerde in de loop van de tijd in uitgebreide functiebibliotheken , die later als basis dienden voor de standaardisatie van de C-taal.
C werd begin jaren 70 ontwikkeld door Dennis Ritchie van Bell Laboratories om het Unix- besturingssysteem te programmeren en groeide in de jaren die volgden in populariteit. Veel universiteiten en organisaties ontwikkelden hun eigen varianten van de taal voor hun projecten, waardoor er al snel compatibiliteitsproblemen ontstonden tussen de verschillende implementaties. In 1983 vormde hetAmerican National Standards Institute (ANSI) een commissie om een gestandaardiseerde C. In december 1989 werd het werk aan de ANSI X3.159-1989 Programming Language C ("C89")-standaard, die ook de C-standaardbibliotheek omvatte, voltooid. Een jaar later werd de norm door ISO aangenomen als de internationale norm ISO/IEC 9899: 1990 ("C90"). Verdere herzieningen volgden, zie ook: Varianten van de programmeertaal C.
Header-bestanden
De volgende header-bestanden worden gedefinieerd door de respectievelijke versies van de standaard:
C89 / C90 | |
---|---|
assert.h | Beweringen |
ctype.h | Tests voor bepaalde soorten tekens |
errno.h | Systeemfoutcodes |
float.h | Informatie over de waardebereiken van getallen met drijvende komma |
limits.h | Informatie over de beperkingen van het gebruikte systeem |
locale.h | Instellingen van de landinstelling |
math.h | wiskundige functies |
setjmp.h | uitgebreide springfuncties |
signal.h | Signaalverwerking |
stdarg.h | Argumentafhandeling voor variadische functies |
stddef.h | aanvullende typedefinities |
stdio.h | Input en output |
stdlib.h | gemengde standaardfuncties, inclusief geheugenbeheer |
string.h | Tekenreeksbewerkingen |
time.h | Datum en tijd |
Nieuw in C95 (ook: "NA1") | |
iso646.h | alternatieve notaties voor logische en bitsgewijze operatoren |
wchar.h | Ondersteuning voor Unicode- tekens |
wctype.h | zoals ctype.h , voor Unicode-tekens |
Nieuw in C99 [1] | |
complex.h | Complexe getallen |
fenv.h | Instellingen voor rekenen met getallen met drijvende komma |
inttypes.h | Conversie- en opmaakfuncties voor geavanceerde integer-typen |
stdbool.h | Ondersteuning voor Booleaanse variabelen |
stdint.h | platformonafhankelijke definitie van integer-types |
tgmath.h | type-generieke macro's voor wiskundige functies |
Nieuw in C11 | |
stdalign.h | Macro's voor het uitlijnen van objecten in het geheugen |
stdatomic.h | Typen en macro's voor atomaire bewerkingen tussen threads |
stdnoreturn.h | Definitie van de no-return macro |
threads.h | Ondersteuning voor threads , mutexen en monitoren |
uchar.h | Ondersteuning voor UTF-16 en UTF-32 gecodeerde Unicode-tekens |
Vrijstaande implementaties
Vrijstaande implementaties hoeven alleen ten minste de volgende header-bestanden te leveren:
kop | 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 |
Implementaties van de C Standard Library
- De glibc is een gratis ( LGPL ) implementatie van de C-standaardbibliotheek die wordt ontwikkeld in het GNU-project met de gcc- compiler. Het is daarom bijzonder wijdverbreid in het Unix-gebied .
- De C-bibliotheekimplementaties van de BSD- besturingssystemen FreeBSD , NetBSD en OpenBSD zijn ook vrij verkrijgbaar (onder een BSD-licentie ). Deze vertegenwoordigen moderne verdere ontwikkelingen van de C-bibliotheek die oorspronkelijk door de CSRG werd geleverd .
- Programma's voor Windows gebruiken vaak de implementatie ( msvcrt.dll ) die wordt geleverd door de " Microsoft Visual C++ " runtime-omgeving , die geen speciale naam heeft omdat deze niet apart verkrijgbaar is.
- Als alternatief zijn er ook minder uitgebreide implementaties beschikbaar, die met name worden gebruikt op embedded systemen , b.v. B. eglibc en de speciaal voor µClinux ontwikkelde uClibc of dieet libc .
- De Klibc is een gratis ( GPL of BSD-licentie ) minimale implementatie van de C-standaardbibliotheek van Hans Peter Anvin , die voornamelijk door de Linux-kernel wordt gebruikt tijdens het opstartproces .
- De msp430-libc kan worden gebruikt voor het programmeren van " TI MSP430 " microcontrollers van Texas Instruments.
- Bionic is een gratis ( BSD-licentie ) implementatie van Google voor het Android- besturingssysteem .
- Newlib is een implementatie van de C-standaardbibliotheek die is geoptimaliseerd voor het maken van projecten op het gebied van embedded systemen .
- musl is een implementatie van de C-standaardbibliotheek die is geoptimaliseerd voor statische koppelingen .
literatuur
- British Standards Institute (red.): De C-norm - met TC1-BS ISO / IEC 9899: 1999 . John Wiley & Sons, 2003, ISBN 0-470-84573-2 .
- PJ Plauger : De standaard C-bibliotheek . Prentice Hall, 1992, ISBN 0-13-131509-9 .
web links
- Overzicht van de C-standaardbibliotheek. Ontvangen 21 september 2010 (C89).
- ISO / IEC 9899: 1999 (C99) met TC1, TC2 en TC3. (PDF; 3,6 MB) Ontvangen 12 september 2010 (Engels, niet-normatief werkdocument).
- Rationale voor C99, revisie 5.10. (PDF; 877 kB) Geraadpleegd op 12 september 2010 (Engels).
- C Bibliotheek. Ontvangen 26 november 2012 .
Individueel bewijs
- ↑ Rationale for International Standard - Programming Languages - C. (PDF; 877 kB) Geraadpleegd op 12 september 2010 (Engels).