A C szabványkönyvtár (más néven libc , crt ) az ANSI C szabvány azon része, amely a fejlécfájloknak és a könyvtári rutinoknak van szentelve . Az általános műveletek végrehajtásának leírása, mint például az I/O és a karakterlánc -feldolgozás a C programozási nyelven . A C Standard Library egy programozási felület leírása , nem pedig a fordítási folyamatban használható valódi könyvtár .
Az egyes függvények nevét és jellemzőit egy fejlécfájlnak nevezett fájl adja meg , de a függvények aktuális megvalósítása külön egy könyvtárfájlban van leírva . A fejlécfájlok nevei és képességei általánossá válnak, de a könyvtárak felépítése továbbra is heterogén. A szabványos könyvtár általában a fordítóval érkezik . Mivel a C fordítók gyakran olyan kiterjesztett funkciókat biztosítanak, amelyeket az ANSI C szabvány nem határoz meg, az egyik fordító szabványos könyvtára nem kompatibilis más fordítók szabványos könyvtáraival.
A C standard könyvtár nagy része jól megtervezettnek tűnik. A múltban előnyösnek bizonyult egyes alkatrészek hibásak lehetnek. A karakterlánc-beviteli funkciók gets()(és a scanf()bemeneti karakterláncok beolvasása) számos puffertúlcsordulás forrása , ezért a legtöbb programozási útmutató azt tanácsolja, hogy kerülje el ezeket a trükköket. A funkció strcpy()is meglehetősen hírhedt. Egy másik kétértelmű funkció strtok() - egy egyszerű lexikális elemzőnek tervezett funkció , de sok "csapdával" van, ezért nagyon nehéz használni.
Az a választás, hogy a típus size_thelyett inta megadott számú elemet használjuk, fread()és fwrite()nincs összhangban a számára size_t(a bájtok számának megjelenítésére) kifejlesztett általános szemantikával.
stdiomeglehetősen korlátozott (túl magas szint ahhoz, hogy sok helyzetben használható legyen), és a szabvány nem teszi lehetővé a felhasználó számára, hogy saját maga módosítsa vagy bővítse tulajdonságait. Ennek eredményeként sok alkalmazás saját burkolókönyvtárat fejleszt az operációs rendszer által megvalósított alacsonyabb szintű mechanizmusok és funkciók köré, mint például a POSIX . Például stdionem működnek olyan jelekkel vagy aszinkron , nem sorozatos I/O módokkal, amelyeket széles körben használnak a hálózati szervereken. Ennek eredményeként a funkciókra stdiocsak a teljes folyamatmodellt használó szerverek támaszkodhatnak, hogy a kliens a POSIX -kompatibilis rendszereken kötegelt I/O-ban szolgálja ki azokat.
A többszálú alkalmazások fejlesztésekor kerülni kell a szabványos könyvtár bizonyos jellemzőit . A szálvezérlő primitíveket az operációs rendszer többi részére szánták, és figyelmen kívül hagyják az olyan általános szabványokat, mint a POSIX szálkönyvtár, és elvárják, hogy a C programozók maguk gondoskodjanak róla, újrafelhasználással és szinkronizálással dolgozva. Sem a C nyelv, sem a szabványos könyvtára semmilyen módon nem ellenőrzi az ilyen rendszerspecifikus eredményeket.
A C programozási nyelv a szabványosítás előtt nem biztosított olyan beépített funkciókat, mint például az I/O műveletek (ellentétben a hagyományos nyelvekkel, mint például a Cobol és a Fortran ). Később a C programozói közösségben olyan ötletek születtek, amelyeket a ma C Standard Library -nek hívunk , hogy támogassák ezt a funkciót. Ezen ötletek többsége végül összeállt a C programozási nyelv szabványának meghatározásához.
A Unixot és a C -t is az AT&T Bell Laboratories -jában hozták létre az 1960-as évek végén és az 1970-es évek elején. Az 1970-es években a C programozási nyelv hihetetlenül népszerűvé kezdett válni. Sok egyetem és szervezet megkezdte saját nyelvváltozatának létrehozását, amely jobban megfelel saját igényeinek. Az 1980-as évek eleje óta a C nyelv különböző implementációi közötti kompatibilitási problémák túlságosan nyilvánvalóvá váltak. 1983- ban az Amerikai Nemzeti Szabványügyi Intézet (ANSI) bizottságot hozott létre a C nyelv szabványának elfogadására, amely "ANSI C" néven ismert. Ennek eredményeként 1989 - ben megszületett az úgynevezett C89 szabvány . Az így létrejött szabvány része volt az ANSI C Standard Library nevű könyvtárkészlet .
A C nyelvi szabvány későbbi verziói néhány új és hasznosabb fejlécfájlt adtak a könyvtárhoz. Az új bővítmények támogatása a megvalósítástól függött.
Az <iso646.h> , <wchar.h> és <wctype.h> fejlécfájlokat az 1. függelékben (rövidítve NA1 ) adtuk hozzá, az 1995 -ben ratifikált C szabványhoz .
A <complex.h> , <fenv.h> , <inttypes.h> , <stdbool.h > , <stdint.h> és <tgmath.h> fejlécfájlok a C99 -ben, a C szabvány egyik változatában kerültek hozzáadásra 1999 -ben jelent meg .
Az ANSI C szabványkönyvtár 24 fejlécfájlból áll, amelyek mindegyike egyetlen direktívával beépíthető egy szoftverprojektbe. Minden fejlécfájl egy vagy több függvénydeklarációt, adattípus-definíciót és makrót tartalmaz. Ezeknek a fejlécfájloknak a tartalma alább látható.
Néhány más nyelvhez (például a Java -hoz ) képest a szabványos könyvtár rendkívül kicsi. A könyvtár támogatja a matematikai függvények alapkészletét, a karakterlánc-feldolgozást, a típuskonverziót, a fájl- és konzol I/O-t. Nem tartalmaz szabványos "tárolótípusok" készletet, mint például a C++ szabványos sablonkönyvtár , a grafikus felhasználói felülettel (GUI) való munkavégzéshez szükséges komponenseket , a hálózatépítést és egyéb, a Java által szabványosan támogatott különféle funkciókat. A kis szabványos könyvtár fő előnye, hogy megkönnyíti az ANSI C környezettel való munkát, mint más nyelvekkel, és ezáltal könnyebben portolható át a C programok új platformokra.
Sok más könyvtárat fejlesztettek ki, hogy támogassa a más nyelvek által biztosított hasonló funkciókat a szabványos könyvtárakban. Például a GNOME asztali környezet fejlesztési projektje kifejlesztette a GTK+ és GLib grafikus eszközkészletet , egy konténeradat-struktúrák könyvtárát, valamint sok más jól ismert példát. A rendelkezésre álló könyvtárak sokfélesége azt jelenti, hogy egyes legfelső szintű eszközök idővel hasznosnak bizonyultak. Jelentős hátránya, hogy gyakran nem működnek jól egymással, így a programozók gyakran jobban hozzá vannak szokva ahhoz, hogy különböző könyvtárkészletekkel dolgozzanak, és készleteik különböző konkrét platformokon is elérhetők lehetnek.
< assert.h > | Tartalmazza az állítás makrót , amely a hibakeresés alatt álló program verziójában a logikai és néhány egyéb típusú hibának észlelésére szolgál. |
< összetett.h > | Függvénykészlet komplex számokkal való munkavégzéshez . ( C99 -ben bemutatva ) |
< ctype.h > | Olyan függvényeket tartalmaz, amelyek a karakterek típusuk szerinti osztályozására vagy a kis- és nagybetűk közötti konvertálásra szolgálnak, függetlenül a használt kódolástól (általában ASCII vagy annak valamelyik kiterjesztése, bár vannak olyan implementációk, amelyek EBCDIC -t használnak ). |
< errno.h > | A könyvtári funkciók által visszaadott hibakódok ellenőrzése. |
< fenv.h > | Lebegőpontos számokat használó környezet vezérléséhez . ( C99 -ben bemutatva ) |
< float.h > | Előre definiált konstansokat tartalmaz, amelyek leírják a lebegőpontos számokkal való munkavégzéshez szükséges könyvtári tulajdonságok megvalósítási sajátosságait , például a két különböző lebegőpontos szám közötti minimális különbséget (_EPSILON), a precíziós számjegyek maximális számát (_DIG) és az érvényes számok tartományát ( _MIN, _MAX ). |
< inttypes.h > | Egész típusok pontos konvertálásához. ( C99 -ben bemutatva ) |
< iso646.h > | ISO 646 kódolású programozáshoz . (Megjelent az NA1 -ben ) |
< limits.h > | Előre meghatározott konstansokat tartalmaz, amelyek meghatározzák az egész típusú tulajdonságok megvalósítási sajátosságait, például az érvényes értékek tartományát (_MIN, _MAX). |
< locale.h > | A setlocale()-hez és a kapcsolódó konstansokhoz. A megfelelő nyelv kiválasztására szolgál . |
< math.h > | Az alapvető matematikai függvények kiszámításához |
< setjmp.h > | Makrókat deklarál setjmp, és longjmpnem helyi ugrásokhoz használja |
< jel.h > | A jelfeldolgozás vezérlésére |
< stdarg.h > | A függvényeknek átadott különböző számú argumentum elérése. |
< stdbool.h > | Logikai adattípusokhoz. ( C99 -ben bemutatva ) |
< stdint.h > | Különböző típusú egész számok meghatározása. ( C99 -ben bemutatva ) |
< stddef.h > | Több szabványos típus és makró meghatározása. |
< stdio.h > | Alapvető bemeneti és kimeneti képességeket valósít meg C nyelven. Ez a fájl egy nagyon fontos funkciót tartalmaz printf. |
< stdlib.h > | Különféle műveletek végrehajtása, beleértve az átalakítást, az álvéletlen számok generálását , a memóriafoglalást, a folyamatvezérlést, a környezetvezérlést, a jeleket, a keresést és a rendezést. |
< string.h > | Különféle húrokkal való munkavégzés. |
< tgmath.h > | Tipikus matematikai függvényekhez. ( C99 -ben bemutatva ) |
< szálak.h > | A <threads.h> fejléc és az <stdatomic.h> támogatja a párhuzamos programozást. (Bevezetve a C11 -ben ) |
< idő.h > | A különböző idő- és dátumformátumok közötti konvertáláshoz. |
< wchar.h > | "Széles" adatfolyamok és többféle karakterlánc kezelése "széles" karakterek használatával (nyelvkészlet támogatása). (Megjelent az NA1 -ben ) |
< wctype.h > | A "széles" karakterek osztályozása. (Megjelent az NA1 -ben ) |
Egyes nyelvek saját könyvtárakkal biztosítják a C standard könyvtár funkcióit. A könyvtár adaptálható a nyelv struktúráihoz, de a műveletek szemantikája hasonló marad. A C++ programozási nyelv például az ANSI C szabványkönyvtár funkcióit tartalmazza az std névtérben ( pl. , stb. ), a hasonló C nevű fejlécfájlokban (" "", " " ", " " stb.) ..). Más nyelvek, amelyek hasonló megközelítést alkalmaznak, például a D és a Python . Utóbbiban például a beépített objektumfájlt úgy definiáljuk, hogy "a C csomag stdio implementálja" [1] , így a rendelkezésre álló műveletek (nyitás, olvasás, írás stb.) a megfelelő C-hez hasonlóan fognak viselkedni. nyelvi funkciók. std::printfstd::atoistd::feofcstdiocmathcstdlib
Még nem szabványosított, de a C programok függhetnek az alprogramok könyvtáraitól, amelyek a fordító által futás közben használt kódot tartalmaznak. A kód, amely inicializálja az operációs rendszer folyamatát, például a hívás előtt main(), a fordító ezen verziójának C Run-Time Library-jában (CRT) valósul meg. A CRT-könyvtár kódja segíthet más nyelvi funkciók megvalósításában, például a nem elkapott kivételek kezelésében vagy a lebegőpontos számok megvalósításában.
A C Standard Library csak a fenti szubrutinok jelenlétét és viselkedését szabályozza. Mivel a fordító megvalósítása függhet ezeknek a kiegészítő funkcióknak a meglététől, minden attól függ, hogy mely rutinokat fordítják a C Standard Library-be, így minden velük fejlesztett programnak szüksége lesz rájuk.
Bár kötegelésük miatt gyakran összekeverik a C Standard Library-vel, a CRT-könyvtár nem szabványosított része a nyelvnek, és a szoftver szállítási módjától függ.
Egyes fordítók (pl . GCC [1] ) támogatják a C Standard Library számos funkciójának belső verzióját; vagyis a függvénymegvalósítások a lefordított objektummodulba vannak írva , és a program a belső verziókat hívja meg a megosztott C könyvtári függvények helyett. Ez csökkenti a függvényhívási költségeket, különösen, ha a függvényhívást beépített változatok váltják fel, és az optimalizálás egyéb formái is megengedettek (ha a fordító támogatja a belső változatok jellemzőinek szabályozását ), de hibakeresési problémákhoz vezethet (pl. belső verziók esetén). nem helyettesíthető szerszámverziókkal ).
A POSIX (és a SUS ) számos olyan szubrutint határoz meg, amelyek a C szabványkönyvtárban meghatározottakon kívül is elérhetők lehetnek; gyakran a szabványos könyvtárhoz hasonló funkcionalitást valósítanak meg, különböző mértékű hasonlósággal. Például a glibc olyan függvényeket valósít meg, mint a fork a libc.so-ban, de a streaming függvénytárak a hívás előtt egyesülnek a glibc-be, még akkor is, ha azt külön könyvtárként hirdetik saját linker jelzővel. Az ilyen POSIX-kompatibilis funkciókat gyakran a könyvtár részének tekintik; így a megfelelő C könyvtár ANSI vagy ISO C könyvtárként azonosítható.
Számos megvalósítás létezik különféle operációs rendszerekkel és C-fordítókkal. A BSD rendszereken például a rendszerkönyvtár be van építve az operációs rendszerbe, és egy megosztott forrástároló karbantartja. A legtöbb rendszeren a könyvtár " libc" néven található.
Bár számos megvalósítás létezik, itt van egy kis lista a legnépszerűbb könyvtárakról:
C programozási nyelv | |
---|---|
Fordítók |
|
Könyvtárak | |
Sajátosságok | |
Néhány leszármazott | |
C és más nyelvek |
|
Kategória:C programozási nyelv |