Ця стаття не містить посилань на джерела. (серпень 2019) |
Стандартна бібліотека мови C (також відома як libc) — стандартна бібліотека для мови програмування C, що відповідає стандартам ISO.[1] Починаючи з оригінального стандарту ANSI C, бібліотека C розроблена у той же час, що й специфікація C POSIX library, яка є його надмножиною.[2][3]
Структура
Ім'я та характеристики кожної функції вказуються у заголовному файлі, але поточна реалізація функцій описана окремо в бібліотечному файлі. Найменування і можливості заголовних файлів стають загальними, але організація бібліотек залишається різнотипною. Через те, що компілятори мови C часто забезпечують розширену функціональність, не визначену стандартом ANSI C, стандартна бібліотека одного компілятора несумісна зі стандартними бібліотеками інших компіляторів.[джерело?]
Історія
Мова програмування C до стандартизації не забезпечувала вбудованої функціональності, як, наприклад, операції вводу-виводу (на відміну від таких традиційних мов, як Кобол і Фортран). Для підтримки цієї функціональності у спільноті програмістів, які працювали з мовою C, зародилися ідеї, реалізовані в те, що зараз називається Стандартною бібліотекою мови C. Більшість цих ідей в підсумку об'єдналися у визначенні стандарту мови програмування C.
Стандарт ANSI
І Unix, і C були створені в AT&T 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, опублікованому 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> | C95 | Для програмування в кодуванні ISO 646. |
<limits.h> | Містить наперед задані константи, що визначають специфіку реалізації властивостей цілих типів, як, наприклад, область припустимих значень (_MIN, _MAX). | |
<locale.h> | Для setlocale () і пов'язаних констант. Використовується для вибору відповідної мови. | |
<math.h> | Для обчислення основних математичних функцій | |
<setjmp.h> | Оголошує макроси setjmp </ tt> і longjmp </ tt>, використовувані для нелокальних переходів | |
<signal.h> | Для управління обробкою [[Сигнал (операційні системи> | сигналів]] | |
<stdalign.h> | С11 | Макроси Alignas та Alignof |
<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»[джерело?], так що доступні операції (відкриття, читання, запис і т. Д.), Як очікується, повинні мати поведінку як у відповідних Функ мови C.
Реалізації
Існує безліч реалізацій, що поставляються як з різними операційними системами, так і з компіляторами мови C. На BSD системах, наприклад, системна бібліотека вбудована в операційну систему і підтримується загальним репозиторієм початкових кодів системи. На більшості систем бібліотека може бути знайдена під ім'ям « libc
».
Хоча існує дуже багато реалізацій, ось невеликий список найпопулярніших бібліотек:
- GNU C Library — найпоширеніша реалізація, використовувана в Linux
- Microsoft C Run-time Library
- Dietlibc — альтернативна невелика реалізація Стандартної бібліотеки мови C
- uClibc[en] — Стандартна бібліотека мови C для вбудованих систем на базі Linux
- Newlib — Стандартна бібліотека мови C для вбудованих систем (без MMU)[4]
- Klibc — застосовується головним чином для завантаження Linux-систем.
- Eglibc — різновид glibc для вбудованих систем.
- musl — орієнтована на вбудовувані Linux-системи.
Примітки
- ↑ §7. ISO/IEC 9899:2018(E): Programming Languages - C (англ.). ISO/IEC. 2018.
- ↑ The GNU C Library – Introduction. gnu.org. Процитовано 5 грудня 2013.
- ↑ Difference between C standard library and C POSIX library. stackoverflow.com. 2012. Процитовано 4 березня 2015.
- ↑ Re: Чи підтримує Newlib процесори без MMU?.