Відкрити головне меню

Стандартна бібліотека мови C (також відома як libc) — частина стандарту ANSI C, присвячена файлам заголовків та бібліотечним підпрограмам. Є описом реалізації спільних операцій, таких як обробка вводу-виводу і рядків, в мові програмування C. Стандартна бібліотека мови C — це опис програмного інтерфейсу, а не справжня бібліотека, придатна для використання в процесі компіляції.[джерело?]

Зміст

СтруктураРедагувати

Ім'я та характеристики кожної функції вказуються у файлі, іменованому заголовним файлом, але поточна реалізація функцій описана окремо в бібліотечному файлі. Найменування і можливості заголовних файлів стають загальними, але організація бібліотек і раніше залишається різнотипною. Стандартна бібліотека зазвичай поставляється разом з компілятором. Через те, що компілятори мови C часто забезпечують розширену функціональність, не визначену стандартом ANSI C, стандартна бібліотека одного компілятора несумісна зі стандартними бібліотеками інших компіляторів.

ІсторіяРедагувати

Мова програмування C до стандартизації не забезпечував вбудованої функціональності, як, наприклад, операції вводу-виводу (на відміну від таких традиційних мов, як Кобол і Фортран). Пізніше, в співдружності програмістів, які працювали з мовою C, зародилися ідеї, які реалізувалися в те, що ми зараз називаємо Стандартної бібліотекою мови C, для підтримки цієї функціональності. Більшість цих ідей в підсумку об'єдналися у визначенні стандарту мови програмування C.

Стандарт ANSIРедагувати

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

Подальші версії стандарту мови C додавали деякі нові і найбільш корисні заголовкові файли в бібліотеку. Підтримка цих нових розширень залежала від реалізації.

Заголовкові файли <iso646.h>, <wchar.h> і <wctype.h> були додані в Додатку 1 (скорочено NA1) — доповненні до Стандарту мови C, ратифікованій в 1995.

Заголовкові файли <complex.h>, <fenv.h>, <inttypes.h>, <stdbool.h>, <stdint.h> і <tgmath.h> були додані в C99, версії Стандарту мови C, опублікованому в 1999 .

Стандартна бібліотека ANSI C складається з 24 заголовків файлів, кожен з яких можна підключати до програмного проекту за допомогою однієї директиви. Кожен заголовний файл містить оголошення однієї або більше функцій, визначення типів даних і макроси. Зміст цих заголовків файлів перераховується нижче.

В порівнянні з деякими іншими мовами (наприклад Java) стандартна бібліотека вкрай мала. Бібліотека забезпечує підтримку основного набору математичних функцій, обробку рядків, конвертацію типів, файловий і консольне введення-виведення. Вона не містить стандартний набір «контейнерних типів» як стандартна бібліотека шаблонів мови C ++, компоненти для роботи з графічним призначеним для користувача інтерфейсом (GUI), мережею та іншої різноманітної функціональності, яку Java підтримує за стандартом. Головною перевагою маленької стандартної бібліотеки є спрощення роботи з оточенням ANSI C порівняно з іншими мовами, а отже і спрощення портування програм мовою C на нові платформи.

Безліч інших бібліотек було розроблено для підтримки схожої функціональності, забезпечувана іншими мовами в їх стандартних бібліотеках. Наприклад, у проекті розробки робочого середовища GNOME був розроблений набір графічних інструментів GTK + та GLib — бібліотека контейнерних структур даних, як втім і безліч інших відомих прикладів. Різноманітність доступних бібліотек означає, що деякі інструменти верхнього рівня, з часом підтвердили свою корисність. Значним мінусом є те, що вони часто не надто успішно взаємодіють один з одним, тому програмістам часто звичніше працювати з різними наборами бібліотек, а їх набори можуть бути доступні на різних специфічних платформах.

Бібліотечні заголовкові файли ANSI CРедагувати

Назва Стандарт Опис
<assert.h> Містить макрос тверджень, використовуваний для виявлення логічних і деяких інших типів помилок в відлагодженої версії програми.
<complex.h> C99 Набір функцій для роботи з комплексними числами.
<ctype.h> Містить функції, використовувані для класифікації символів за їх типами або для конвертації між верхнім і нижнім регістрами незалежно від використовуваної кодування (зазвичай ASCII або одне з її розширень, хоча є й реалізації, що використовують EBCDIC).
<errno.h> Для перевірки кодів помилок, що повертаються бібліотечними функціями.
<fenv.h> C99 Для управління середовищем, що використовує числа з рухомою комою.
<float.h> Містить заздалегідь певні константи, що описують специфіку реалізації властивостей бібліотеки для роботи з числами з рухомою комою, як, наприклад, мінімальна різниця між двома різними числами з рухомою крапкою (_EPSILON), максимальне число цифр точності (_DIG) і область допустимих чисел (_MIN, _MAX).
<inttypes.h>> C99 Для точної конвертації цілих типів.
<iso646.h> NA1 Для програмування в кодуванні ISO 646.
<limits.h> Містить наперед задані константи, що визначають специфіку реалізації властивостей цілих типів, як, наприклад, область допустимих значень (_MIN, _MAX).
<locale.h> Для setlocale () і пов'язаних констант. Використовується для вибору відповідного мови.
<math.h> Для обчислення основних математичних функцій
<setjmp.h> Оголошує макроси setjmp </ tt> і longjmp </ tt>, використовувані для нелокальних переходів
<signal.h> Для управління обробкою [[Сигнал (операційні системи> | сигналів]]
<stdarg.h> Для доступу до різного числу аргументів, переданих функціям.
<stdbool.h> C99 Для булевих типів даних.
<stdint.h> C99 Для визначення різних типів цілих чисел.
<stddef.h> Для визначення декількох стандартних типів і макросів.
<stdio.h> Реалізує основні можливості введення і виведення в мові C. Цей файл містить вельми важливу функцію printf .
<stdlib.h> Для виконання безлічі операцій, включаючи конвертацію, генерацію псевдовипадкових чисел, виділення пам'яті, контроль процесів, оточення, сигналів, пошуку і сортування.
<string.h> Для роботи з різними видами рядків.
<tgmath.h> C99 Для типових математичних функцій.
<time.h> Для конвертації між різними форматами часу та дати.
<wchar.h> NA1 Для обробки «широких» потоків і декількох видів рядків за допомогою «широких» символів (підтримка набору мов).
<wctype.h> NA1 Для класифікації «широких» символів.

Стандартна бібліотека C в інших мовахРедагувати

Деякі мови забезпечують функціональність стандартної бібліотеки C за допомогою своїх власних бібліотек. Бібліотека може бути адаптована для структур мови, але семантика операцій залишається схожою. Мова програмування C ++, наприклад, містить функціональність стандартної бібліотеки ANSI C в просторі імен std (наприклад, std :: printf, std :: atoi, std :: feof і т. Д.), В заголовних файлах з схожими іменами як в C («cstdio», «cmath», «cstdlib» і т. д.). До інших мов, в яких застосовуються схожі підходи відносяться, наприклад, D і Python. В останньому, наприклад, вбудований об'єкт file визначений як «реалізований за допомогою пакета stdio мови C» [1], так що доступні операції (відкриття, читання, запис і т. Д.), Як очікується, повинні мати поведінку як у відповідних Функ мови C.

РеалізаціїРедагувати

Існує безліч реалізацій, що поставляються як з різними операційними системами, так і з компіляторами мови C. На BSD системах, наприклад, системна бібліотека вбудована в операційну систему і підтримується загальним репозиторием ісходников. На більшості систем бібліотека може бути знайдена під ім'ям « libc ».

Хоча існує дуже багато реалізацій, ось невеликий список найпопулярніших бібліотек:

  • GNU C Library — найпоширеніша реалізація, використовувана в Linux
  • Microsoft C Run-time Library
  • Dietlibc — альтернативна невелика реалізація Стандартної бібліотеки мови C
  • UClibc — Стандартна бібліотека мови C для вбудованих систем на базі Linux
  • Newlib — Стандартна бібліотека мови C для вбудованих систем (MMU-less)[1]
  • Klibc — застосовується головним чином для завантаження Linux-систем.
  • Eglibc — різновид glibc для вбудованих систем.
  • musl — орієнтована на вбудовувані Linux-системи.

ПриміткиРедагувати