Стандартна бібліотека мови C (також відома як libc) — стандартна бібліотека для мови програмування C, що відповідає стандартам ISO. Починаючи з оригінального стандарту ANSI C, бібліотека C розроблена у той же час, що й специфікація C POSIX library, яка є його надмножиною.
Структура Ім'я та характеристики кожної функції вказуються у заголовному файлі, але поточна реалізація функцій описана окремо в бібліотечному файлі. Найменування і можливості заголовних файлів стають загальними, але організація бібліотек залишається різнотипною. Через те, що компілятори мови 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> Оголошує макроси <tt> setjmp </ tt> і <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 — Стандартна бібліотека мови C для вбудованих систем на базі Linux Newlib — Стандартна бібліотека мови C для вбудованих систем (без MMU) Klibc — застосовується головним чином для завантаження Linux-систем. Eglibc — різновид glibc для вбудованих систем. musl — орієнтована на вбудовувані Linux-системи.
Примітки