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

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

Зміст

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

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

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

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

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

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

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

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

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

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

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

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

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

Назва Стандарт Опис
<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> Реалізує основні можливості введення і виведення в мові Сі. Цей файл містить вельми важливу функцію printf .
<stdlib.h> Для виконання безлічі операцій, включаючи конвертацію, генерацію псевдовипадкових чисел, виділення пам'яті, контроль процесів, оточення, сигналів, пошуку і сортування.
<string.h> Для роботи з різними видами рядків.
<tgmath.h> C99 Для типових математичних функцій.
<time.h> Для конвертації між різними форматами часу та дати.
<wchar.h> NA1 Для обробки «широких» потоків і декількох видів рядків за допомогою «широких» символів (підтримка набору мов).
<wctype.h> NA1 Для класифікації «широких» символів.

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

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

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

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

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

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

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