Стандартная бібліятэка C

**Стандартнай бібліятэкай мовы C** (таксама вядомая як **libc**, **crt**) называецца частка стандарту ANSI C, прысвечаная загалоўкавым файлам і бібліятэчным падпраграмам. З'яўляецца апісаннем рэалізацыі агульных аперацый, такіх як апрацоўка ўводу-вываду і радкоў, у мове праграмавання C. Стандартная бібліятэка мовы C — гэта апісанне праграмнага інтэрфейса, а не сапраўдная бібліятэка, прыдатная для ўжывання ў працэсе кампіляцыі.

## Структура 
Імя і характарыстыка кожнай функцыі ўказваюцца ў файле, што завецца загалоўкавым, але бягучая рэфалізацыя функцый апісана асобна ў бібліятэчным файле. Найменаванне і магчымасці загалоўкавых файлаў становяцца агульнымі, але арганізацыя бібліятэк па-ранейшаму застаецца разнатыпный. Стандартная бібліятэка звычайна пастаўляецца разам з кампілятарам. Так як кампілятары мовы C часта забяспечваюць пашыраную функцыянальнасць, не вызначанаю стандартам ANSI C, стандартная бібліятэка аднаго кампілятара можа быць несумяшчальнай са стандартнымі бібліятэкамі іншых кампілятараў.

### Меркаванне аб структуры 
Большая частка стандартнай бібліятэкі мовы C робіць уражанне ўдала спраектаванай. Некаторыя асобныя часткі, што давалі перавагу ў мінулым, могуць правакаваць памылкі. Функцыі радковага ўводу `gets()` (і ўжыванне `scanf()` для ўводу радкоў) з'яўляюцца крыніцай мноства перапаўненняў буфера, таму большасць дапаможнікаў аб праграмаванні раяць пазбягаць падобных прыёмаў. Функцыя `strcpy()` таксама непрыемна знакаміта. Яшчэ адной неадназначнай функцыяй з'яўляецца `strtok()` — функцыя, распрацаваная як просты лексічны аналізатар, але мае мноства «падводных камянёў» і таму вельмі складаная ва ўжыванні.

`stdio` досыць абмежаваны (вельмі высокі ўзровень для ўжывання ў многіх сітуацыях) і стандарт не дазваляе карыстальніку самастойна перапрызначаць або пашыраць яго ўласцівасці. У выніку, для мноства пракладанняў распрацоўваюцца ўласныя бібліятэкі-абгорткі вакол механізмаў ніжэйшага ўзроўню і функцый, рэалізаваных аперацыйнамі сістэмамі POSIX-класа. Напрыклад, `stdio` не працуюць з сігналамі або асінхроннымі непакетнымі рэжымамі ўводу-вываду, яія шырока ўжываюцца ў сеціўных серверах. У выніку, на функцыі `stdio` могуць цалкам палагацца толькі серверы, што выкарыстоўваюць мадэль целага працэса для кліента, для абслугоўвання іх на POSIX-сумяшчальных сістемах у пакетным рэжыме ўводу-вываду.

Пэўных функцый стандартнай бібліятэкі варта пазбягаць пры распрацоўцы шматпатокавых пракладанняў. Прымітывы кантролю патокаў прызначаліся для астатняй часткі АС і ігнаруюць агульныя стандарты, як напрыклад, бібліятэку патокаў POSIX, бяркуючы, што праграмісты мовы C самастойна аб гэтым паклапоцяцца, працуючы з паўторным выкарыстаннем і сінхранізацыяй. Ні мова C, ні яго стандартная бібліятэка ніяк не правяраюць падобныя сістэмаспецыфічныя вынікі.

## Гісторыя 
Мова праграмавання Сі да стандартызацыі не забяспечвала ўбудаванай функцыянальнасці, як напрыклад аперацыі ўводу-вываду (у адрозненні ад такіх традыцыйных моў, як COBOL і FORTRAN). Пазней у суполцы праграмістаў, што працавалі з мовай Сі, зарадзіліся ідэі, якія рэалізаваліся ў тое, што мы зараз называем **Стандартнай бібліятэкай мовы Сі**, для падтрымкі гэтай функцыянальнасці. Большасць гэтых ідэй у выніку аб'ядналіся ў вызначэнне стандарту мовы праграмавання Сі.

І Unix, і Сі былі створаны ў AT&T’s Bell Laboratories на прыканцы 1960-х — пачатку 1970-х. У 1970-я мова праграмавання Сі пачала карыстацца неверагоднай папулярнасцю. Мноства універсітэтаў і арганізацый пачалі ствараць уласныя варыянты мовы, больш прыдатная для ўласных патрэбаў. На пачатку 1980-х праблемы сумяшчальнасці паміж рознымі рэалізацыямі мовы Сі сталі надта відавочнымі. У 1983 годзе Амерыканскі нацыянальны інстытут стандартаў (ANSI) сфармаваў камітэт для прыняцца стандарту мовы Сі, вядомы як «ANSI C». Гэта праца вылілася ў стварэнне так званага стандарта **C89** у 1989 годзе. Частка выніковага стандарта была наборам бібліятэк, названай **Стандартная бібліятэка ANSI C**.

Наступныя версіі стандарту мовы Сі дадавалі некаторыя новыі і найбольш карысныя загалоўкавыя файлы ў бібліятэку. падтрымка гэтых новых пашырэнняў залежала ад рэалізацыі.

Загалоўкавыя файлы ****, **** і **** былі даданы ў *Дадатак 1* (*Normative Addendum*, скарочана **NA1**) — пашырэнне да стандарта мовы Сі, ратыфікаваным у 1995.

Загалоўкавыя файлы ****, ****, ****, ****, **** і **** былі даданы ў **C99**, версіі Стандарту мовы Сі, апублікаваным у 1999.

## Стандарт ANSI 
Стандартная бібліятэка ANSI C складаецца з 24 загалоўкавых файлаў, кожны з якіх можна далучыць да праграмнага праекта з дапамогай адной дырэктывы. Кожны загалоўкавы файл змяшчае аб'яўленні адной ці болей функцый, вызначэнні тыпаў даных і макрасы. Змест гэтых загалоўкавых файлаў пералічваецца ніжэй.

У параўнанні з некаторымі іншымі мовами (напрыклад Java) стандартная бібліятэка надзвычай меленькая. Библіятэка забяспечвае падтрымку асноўнага набору матэматычных функцый, апрацоўку радкоў, канвертацыю тыпаў, файлавы і кансолны ўвод-вывад. Яна не змяшчае стандартны набор «кантэйнерных тыпаў», як стандартная бібліятэка шаблонаў C++, кампаненты для работы з графічным інтерфейсам карыстальніка (GUI), сеткай і іншай разнастайнай функцыянальнасцю, якую Java падтрымлівае паводле стандарта. Галоўнай перавагай маленькай стандартнай бібліятэкі з'яўляецца спрашчэнне працы за асяроддзем ANSI C у параўнанні з іншымі мовамі, і спрашчэнне партавання праграм на мове Сі на новыя платформы.

Мноства іншых бібліятэк было распрацавана для падтрымкі падобнай функцыянальнасці, што забяспечваецца іншымі мовамі ў іх стандартных бібліятэках. Напрыклад, у праекце распрацоўкі асяроддзя рабочага стала GNOME быў распрацаваны набор графічных інструментаў GTK+ і GLib — бібліятэка кантэйнерных структур даных, як і мноства іншых вядомых прыкладаў. Разнастайнасць даступных бібліятэк значыць, што некаторыя інструменты верхняга ўзроўню з уягам часу пацвердзілі сваю карысць. Значным мінусам з'яўляецца тое, што яны часто не надта добра ўзаемадзейнічаюць адзін з адным, таму праграмістам зачастую больш звыкла працаваць з рознымі наборамі бібліятэк, а іх наборы могуць быць даступнымі на розных спецыфічных платформах.

### Бібліятэчныя загалоўкавыя файлы ANSI C з пашырэннямі C99 і C11 
## Стандартная бібліятэка Сі ў іншых мовах 
Некаторыя мовы забяспечваюць функцыянальнасць стандартнай бібліятэкі Сі з дапамогай сваіх уласных бібліятэк. Бібліятэка можа быць адаптавана для структур мовы, але семантыка аперацый застаецца падобнай. Мова праграмавання C++ змяшчае функцыянальнасць стандартнай бібліятэкі ANSI C у прасторы імёнаў **std** (напрыклад `std::printf`, `std::atoi`, `std::feof` і інш.), у загалоўкавых файлах з падобнымі імёнамі як у Сі («`cstdio`», «`cmath`», «`cstdlib`» и т. д.). Да іншых моў, у якіх ужываюцца падобныя падыходы, належыць D і Python. У апошнім убудаваны аб'ект **file** вызначаны як *«рэалізаваный з дапамогай пакета stdio мовы Сі»http://docs.python.org/lib/bltin-file-objects.html *, так што даступныя аперацыі (адкрыццё, чытанне, запіс і інш.), як чакаецца, павінны мець паводзіны, як у адпаведных функцый мовы Сі.

## Агульная падтрымка бібліятэк 
Пакуль не стандартызавана, але праграмы на мове Сі могуць залежаць ад бібліятэк падпраграм, якія змяшчаюць код, ужываны кампілятарам падчас працы. Код, што ініцыялізуе працэс для аперацыйнай сістэмы перад выклікам `main()`, рэалізаваны ў бібліятэцы «падчас выканання» мовы Сі (C Run-Time Library, CRT) для бягучай версіі кампілятара. Код бібліятэкі CRT можа дапамагчы з рэалізацыяй іншых асаблівасцяў мовы, такіх як апрацоўка неперахопленых выключэнняў або рэалізацыя працы з лікамі з рухомай коскай.

Стандартная бібліятэка мовы Сі толькі рэгламентуе наяўнасць вышэйзгаданых падпраграм і іх паводзіны. Паколькі рэалізацыя кампілятара можа залежаць ад наяўнасці гэтых дадатковых функцый, усё залежыць ад таго, якія падпраграмы змешчаны ў Стандартную бібліятэку мовы Сі, такім чынам, любая праграма, што распрацавана з іх дапамогай, будзе мець у іх патрэбу.

## Убудаваныя функцыі кампілятара 
Некаторыя кампілятары (напрыклад, GCC) падтрымліваюць унутраныя версіі мноства функцый Стандартнай бібліятэкі мовы Сі, то-бок, рэалізацыі функцый запісваюцца ў кампіляваны аб'ектны модуль, а праграма выклікае ўнутраныя версіі замест функцый агульнай бібліятэкі Сі. Гэта змяншае накладныя выдаткі на выклік функцыі, асабліва калі выклік функцыі замяняецца ўбудаванымі варыянтамі і дазваляецца выкарыстанне іншых форм аптымізацыі (калі кампілятар падтрымлівае кіраванне характарыстыкамі ўнутраных варыянтаў), але можа прыводзіць да праблем пры адладцы (унутраныя версіі не могуць быць замененыя інструментальнымі версіямі для праверкі).

## Стандартная бібліятэка POSIX 
POSIX (і SUS) вызначае колькасць падпраграм, якія могуць быць даступныя апроч вызначаных у Стандартнай бібліятэцы мовы Сі; яны часта рэалізуюць аналагічную функцыянальнасць са Стандартнай бібліятэкай з рознай ступенню падабенства. Напрыклад, glibc рэалізуе такія функцыі як fork у libc.so, аде перад выклікам бібліятэкі патокаў яднаюцца ў glibc, хоцб гэта заяўлена як асобная бібліятэка з уласным флагам лінкавальніка. Зачастую, такая POSIX-сумяшчальная функцыянальнасць разглядаецца як частка бібліятэкі; адпаведная бібліятэка Сі можа быць ідэнтыфікавана як ANSI ці ISO бібліятэка мовы Сі.

## Рэалізацыі 
Існуе мноства рэалізацый, што пастаўляюцца як з рознымі аперацыйнымі сістэмамі, так і з кампілятарамі мовы Сі. На BSD сістэмах сістэманя бібліятэка ўбудавана ў аперацыйную сістэму і падтрымліваецца агульным рэпазітарам коду. На большасці сістэм бібліятэка можа быць знойдзена пад імем «`libc`».

Хоць існуе вельмі шмат рэалізацый, вомь невялікі спіс самых папулярных бібліятэк:
* GNU C Library — самая распаўсюджаная рэалізацыя, ужываная ў Linux
* Microsoft C Run-time Library
* dietlibc — альтэрнатыўная невялікая рэалізацыя Стандартнай бібліятэкі мовы Сі
* uClibc — Стандартная бібліятэка мовы Сі для ўбудаваных сістэм на базе Linux
* Newlib — Стандартная бібліятэка мовы Сі для ўбудаваных сістэм (MMU-less)
* klibc — выкарыстоўваецца пераважна для загрузкі Linux-сістэм.
* eglibc — разнавіднасць glibc для ўбудаваных сістэм.

## Гл. таксама 
* Спіс функцый стандартнай бібліятэкі C
* Стандартная бібліятэка мовы C++

## Дадатковыя крыніцы 
* Дапаможнік Карыстальніка для працы з Бібліятэкай Сі 
* Microsoft Бібліятэкі выканання Мовы Сі у MSDN
* NetBSD Дапаможніе па Бібліятэкам Сі  і поўныя заходныякоды бібліятэкі Сі: Добрыя акадэмічныя даведнікі.

*
Катэгорыя:Мова праграмавання Сі
Катэгорыя:Стандартныя бібліятэкі
Катэгорыя:Праграмаванне