C standard bibliotek

C - standardbiblioteket ( også kjent som stdio.h ) er en samling av overskriftsfiler og biblioteker med rutiner, standardisert av en komité i International Organization for Standardization (ISO), som implementerer vanlige operasjoner, for eksempel input og output eller strenghåndtering . I motsetning til andre språk som COBOL , Fortran eller PL/1 , inkluderer ikke C nøkkelord for disse oppgavene, så praktisk talt hvert program implementert i C er avhengig av standardbiblioteket for å fungere.

Design

Navnet og egenskapene til hver funksjon, prototypen , samt definisjonen av enkelte datatyper og makroer , finnes i en fil som kalles header-filen (med filtypen " .h "), men selve implementeringen av funksjonene er separat. i en biblioteksfil. Navngivningen og omfanget av overskriftene har blitt vanlig, men organiseringen av bibliotekene er fortsatt mangfoldig, siden de vanligvis distribueres med hver kompilator . Fordi C-kompilatorer ofte gir tilleggsfunksjonalitet som ikke er spesifisert i ANSI C , er ikke en kompilatorbibliotek alltid kompatibelt med standarden eller med bibliotekene til andre kompilatorer.

Designkvalitet

Det meste av C-standardbiblioteket har vist seg å være godt designet, selv om noen deler også har vist seg å være kilder til feil; Inndatastrengfunksjoner som gets()eller scanf()forårsaker bufferoverløp, og mange programmeringsveiledninger anbefaler å unngå bruk av dem. Funksjonen strtok()har en annen singularitet, den er designet for å brukes som en rudimentær leksikalsk analysator , men den er vanskelig å bruke i tillegg til at den er veldig skjør.

Historie

C-programmeringsspråket , før det ble standardisert, hadde ikke funksjoner som input/output-operasjoner (i motsetning til tradisjonelle språk som COBOL og FORTRAN). Over tid delte fellesskap av C-brukere ideer så vel som implementeringer av det som nå kalles C-standardbibliotekene for å gi slik funksjonalitet. Mange av disse ideene ble etter hvert innlemmet i den standardiserte definisjonen av språket.

Både Unix og C ble laget ved AT&Ts Bell Labs på slutten av 1960 - tallet og begynnelsen av 1970-tallet. Det var på 1970-tallet at programmeringsspråket C vokste i popularitet. Mange organisasjoner og universiteter laget sine egne versjoner av språket for sine egne prosjekter. På begynnelsen av 1980-tallet ble kompatibilitetsproblemer avledet av eksistensen av flere implementeringer av språket tydelige. I 1983 opprettet American National Standards Institute (ANSI ) en komité for å etablere en standard språkspesifikasjon kjent som ANSI C. Dette arbeidet kulminerte med etableringen av den såkalte C89 -standarden i 1989 . En del av den resulterende standarden var et sett med programvarebiblioteker kalt 'ANSI C Standard Libraries' .

Senere versjoner av C-standarden har lagt til noen nye header-filer til biblioteket:

Støtte for disse nye utvidelsene varierer etter implementering.

ANSI-standarden

ANSI C-standardbiblioteket består av 24 header-filer som kan inkluderes i et programmeringsprosjekt med ett enkelt direktiv. Hver overskrift inneholder erklæringen om én eller flere funksjoner, datatyper og makroer .

Sammenlignet med andre programmeringsspråk (som Java ) er standardbiblioteket veldig lite, det gir et grunnleggende sett med matematiske funksjoner, strenghåndtering, typekonverteringer og konsoll- eller filinndata/utdata . Verken et sett med grunnleggende containerdatatyper (lister, stabler, køer, ...), eller verktøy for å lage et grafisk brukergrensesnitt (GUI), eller operasjoner for å fungere i nettverk, eller andre funksjoner som språk er inkludert. som C++ eller Java innlemmer på en standard måte. Hovedfordelen med den lille størrelsen på C-standardbiblioteket er at det er veldig enkelt å bygge et ANSI C-rammeverk, og derfor er det relativt enkelt å portere et ANSI C-program fra en plattform til en annen.

Mange andre biblioteker har blitt utviklet for å gi funksjonalitet tilsvarende funksjonaliteten til andre programmeringsspråk. For eksempel opprettet GNOME Desktop Environment Development Project GTK+- og GLib- bibliotekene med funksjonalitet for utvikling og arbeid med grafiske brukergrensesnitt. Variasjonen av tilgjengelige biblioteker har ført til at gjennom historien har overlegenheten til noen av disse verktøyene blitt demonstrert. Den store ulempen er at de ofte ikke fungerer spesielt godt sammen, det er som regel programmererne selv som er kjent med de ulike bibliotekene som klarer å få mest mulig ut av dem, selv om ulike deler av dem kan være tilgjengelig på hvilken som helst plattform.

ANSI C bibliotektopptekstfiler

< assert.h > Inneholder assert -makroen som brukes til å oppdage logiske feil og andre typer feil ved feilsøking av et program.
< kompleks.h > Sett med funksjoner for å manipulere komplekse tall (nytt i C99).
< ctype.h > Inneholder funksjoner for å klassifisere tegn i henhold til deres typer eller for å konvertere mellom store og små bokstaver uavhengig av tegnsettet (vanligvis ASCII eller en av dens utvidelser).
< errno.h > For å analysere feilkodene som returneres av bibliotekfunksjoner.
< fenv.h > For å kontrollere flyttallmiljøer (nytt i C99).
< float.h > Inneholder definisjonen av konstanter som spesifiserer visse egenskaper til flyttallsbiblioteket, for eksempel minimumsforskjellen mellom to flyttallstall (_EPSOLON), maksimalt antall sifre med presisjon (_DIG), eller rekkevidden av verdier som kan være representert (_MIN, _MAX).
< inttypes.h > For presisjonskonverteringsoperasjoner mellom heltallstyper (ny i C99).
< iso646.h > For å bruke ISO 646 tegnsett (nytt i NA1).
< limits.h > Inneholder definisjonen av konstanter som spesifiserer visse egenskaper for heltallstyper, for eksempel rekkevidden av verdier som kan representeres (_MIN, _MAX).
< locale.h > For funksjonen setlocale()og relaterte konstanter. Den brukes til å velge riktig sted (lokal).
< math.h > Inneholder de vanlige matematiske funksjonene.
< setjmp.h > Deklarer makroene setjmpog longjmpgi ikke-lokale programkontrollflytbrudd.
< signal.h > Å håndtere noen eksepsjonelle situasjoner som divisjon på null.
< stdarg.h > Gir tilgang til et variabelt antall argumenter som sendes til en funksjon.
< stdbool.h > For boolsk type (ny i C99).
< stdint.h > For å definere flere heltallstyper (ny i C99).
< stddef.h > For å definere ulike typer verktøymakroer.
< stdio.h > Gir kjernen i C-språkets input/output-funksjoner (inkluderer den ærverdige printf) funksjonen.
< stdlib.h > For å utføre visse operasjoner som typekonvertering, generering av pseudo-tilfeldig tall, dynamisk minnehåndtering, prosesskontroll, miljøfunksjoner, signalering (??), sortering og søking.
< string.h > For strengmanipulering .
< tgmath.h > Inneholder type - generisk matematisk funksjonalitet (ny i C99).
< time.h > For behandling og konvertering mellom dato- og tidsformater.
< wchar.h > For å håndtere brede datastrømmer og ulike typer brede tegnstrenger (2 eller flere byte per tegn), nødvendig for å støtte tegn fra forskjellige språk (ny i NA1).
< wctype.h > For å samle brede tegn (ny i NA1).

C-standardbiblioteket i C++

C++- programmeringsspråket inkluderer funksjonaliteten til ANSI C-standardbiblioteket, men gjør noen modifikasjoner som å endre navnene på overskriftsfilene, fra <xxx.h> til <cxxx> (selv om navn i C-stil, selv om de er foreldet , fortsatt er foreldet . tilgjengelig), og plasser alle identifikatorer i navneområdet std .

Vanlige støttebiblioteker

Selv om de ikke er standardiserte, kan C-programmer stole på et bibliotek med kjøretidsrutiner som inneholder kode som kompilatoren bruker ved kjøretid. Koden som initialiserer en prosess av operativsystemet (for eksempel før du kaller ) er implementert i C Run-Time- biblioteket levertmain() av kompilatorleverandøren. Run-Time- bibliotekskoden kan hjelpe med andre implementeringsfunksjoner, for eksempel håndtering av ufangede unntak eller implementering av kode for flyttalloperasjoner.

C-standardbiblioteket dokumenterer kun at rutinene nevnt i denne artikkelen er tilgjengelige og atferden deres. Siden kompilatorimplementeringen kan avhenge av implementeringen av disse funksjonene for å være tilgjengelig, er det sannsynlig at produsentens spesifikasjoner for rutinene er pakket med C-standardbiblioteket i samme modul, siden begge sannsynligvis vil være nødvendig for ethvert program bygget med denne kompilatoren.

Selv om det ofte forveksles med C Standard Library, på grunn av denne innpakningen, er C Run-Time Library ikke en standard del av språket, men er i stedet en spesifikasjon.

Innebygde kompilatorfunksjoner

Noen kompilatorer (for eksempel GCC [ 1 ] ) gir innebygde versjoner av mange av funksjonene til C-standardbiblioteket; det vil si at implementeringen av funksjonene skrives inne i den kompilerte objektfilen , og programmet kaller den innebygde versjonen i stedet for funksjonen i den delte objektfilen i biblioteket C. Dette reduserer overheaden til et funksjonskall , spesielt hvis funksjonskall erstattes med innebygde varianter , og tillater andre former for optimalisering (for eksempel når kompilatoren kjenner flytkontrollfunksjonene til innebygde varianter), men kan forårsake forvirring ved feilsøking (for eksempel innebygde versjoner kan de ikke erstattes av de instrumenterte variantene).

POSIX standardbibliotek

POSIX (og SUS ) spesifiserer en rekke rutiner som skal være tilgjengelige utover selve C standardbiblioteket Disse implementeres ofte sammen med C standardbiblioteket, med ulik grad av nærhet. For eksempel implementerer glibc funksjoner som fork()i libc.so , men tidligere ble NPTL slått sammen med glibc som et bibliotek med sitt eget koblingsflagg. Denne POSIX-funksjonaliteten regnes ofte som en del av biblioteket; selve C-biblioteket kan identifiseres som ANSI C- eller ISO C -biblioteket.

Se også

Referanser

  1. Andre innebygde funksjoner levert av GCC , GCC Manual

Eksterne lenker