C (укр. Сі) — універсальна, процедурна, імперативна мова програмування загального призначення, розроблена у 1972 році Деннісом Рітчі у Bell Telephone Laboratories з метою написання нею операційної системи UNIX.
C | |
---|---|
Парадигма | імперативна (процедурна) |
Дата появи | 1972 |
Творці | Денніс Рітчі |
Розробник | Денніс Рітчі та Bell Labs |
Система типізації | статична, слабка |
Основні реалізації | GCC, MSVC, , |
Діалекти | «K&R» C (1978) ANSI C (1989) C90 (1990) C99 (1999) C11 (2011) |
Під впливом від | B (BCPL,), , Assembler, Pascal, FORTRAN |
Вплинула на | awk, csh, , Objective-C, , D, , Java, Javascript, Python |
Операційна система | Windows і UNIX-подібні операційні системи |
Звичайні розширення файлів | .c або .h |
Вебсайт | iso.org/standard/74528.html |
|
Хоча С і було розроблено для написання системного програмного забезпечення, наразі вона досить часто використовується для написання прикладного програмного забезпечення.
С імовірно, є найпопулярнішою у світі мовою програмування за кількістю вже написаного нею програмного забезпечення, доступного під вільними ліцензіями коду та кількості програмістів, котрі її знають. Версії компіляторів для мови С існують для багатьох операційних систем та апаратних архітектур. C здійснила великий вплив на інші мови програмування, особливо на , яку спочатку проєктували як розширення для С, а також на Java та C#, які запозичили у .
В 2023 році, у категорії найпопулярніших мов програмування серед IT-спеціалістів згідно рейтингу IEEE Spectrum, який охоплював 59 мов програмування, топ-5 виглядав так: Python, Java, C++, C, JavaScript.
Філософія
С — мінімалістична мова програмування. Серед її головних цілей: можливість прямолінійної реалізації компіляції, використовуючи відносно простий компілятор, забезпечити низькорівневий доступ до оперативної пам'яті, формувати лише кілька інструкцій машинної мови для кожного елементу мови і не вимагати великої динамічної підтримки. У результаті код С придатний для більшості системного програмного забезпечення, яке традиційно писали асемблером.
Попри її низькорівневі можливості, мову проєктували для платформонезалежного програмування. Сумісна зі стандартами та платформонезалежна написана мовою C програма може легко компілюватися на великій кількості апаратних платформ та операційних систем з мінімальними змінами. Мова стала доступною для великої кількості платформ — від вбудованих мікроконтролерів до суперкомп'ютерів.
Мінімалізм
Мову С проєктували з розрахунком на те, щоб використовувати у системному програмуванні. Отже, вона не вимагає додаткового часу на виконання перевірок різноманітних умов, які ніколи не відбудуться у правильно написаній програмі, а забезпечує простий, прямий доступ до адреси будь-якого об'єкта (наприклад, карти пам'яті, пристрою контролю регістрів), і її початковий код компілюється у послідовність примітивних машинних операцій.
Б'ярн Страуструп якось написав про неї: «С робить так, щоб вам було легко вистрілити собі в ногу» Іншими словами, С дозволяє здійснення низки операцій, котрі часто є небажаними, а тому чимало помилок у коді не виявляє компілятор, і вони не можуть бути очевидними під час виконання. Якщо під час програмування та підтримки програмного забезпечення не дотримуватися низки суворих правил, пізніше може виникнути немало проблем зі швидкодією, стабільністю та безпекою програмного забезпечення. (Хоча, виною подібних проблем найчастіше є програмісти, бо С сама по собі забезпечує низький рівень захисту).
З часом було розроблено багато утиліт для додаткових перевірок коду на наявність помилок перед компіляцією та під час його роботи. Ніщо не заважає компіляторові здійснювати додаткові перевірки коду, не передбачені специфікацією мови, однак для деякого системного програмного забезпечення вони є неприпустимими, бо зменшують швидкість виконання коду.
У відповідь на критику мови C як сильно типізованої мови Керніган та Рітчі послалися на основу філософії дизайну C: «З усім тим, C зберігає основний принцип, який передбачає, що програмісти добре знають, що вони роблять, і вимагає лише, щоб вони чітко давали компіляторові знати про свої наміри».
Характеристика
Як і більшість імперативних мов, заснованих на традиції АЛГОЛ, C має можливості для структурного програмування і дозволяє здійснювати рекурсії, у той час, як система статичної типізації даних запобігає виникненню багатьох непередбачуваних операцій. У С увесь виконуваний код міститься у функціях. Параметри функції завжди передаються за значеннями. Передача параметрів за вказівником реалізовується шляхом передачі значення вказівника. Гетерогенні сукупності типів даних (структури) дозволяють пов'язаним типам даних бути об'єднаними і маніпулювати ними, як єдиним цілим.
C також має такі специфічні властивості:
- змінні можуть бути прихованими у вкладених блоках
- слабка типізація; наприклад, символи можуть використовуватися, як цілі числа
- низькорівневий доступ до оперативної пам'яті шляхом перетворення машинних адрес на вказівники
- вказівники на функції і дані підтримують динамічний поліморфізм
- індексація масивів як вторинне поняття, визначається у термінах арифметики вказівників
- стандартизований препроцесор C для макроозначення, включення файлу з джерельним кодом, умовної трансляції тощо.
- відсутність вбудованих операторів (вводу-виводу), потоків, обробки рядків і чисел з рухомою комою. Вся ця функціональність реалізується у бібліотеках виконання.
- відносно невелика кількість зарезервованих слів (32 у С89, і 37 у C99)
- Лексичні структури, які нагадують B більше за ALGOL, наприклад:
{ ... }
на відміну від ALGOL'івськогоbegin ... end
- знак рівності для призначення (копіювання), як це робиться у мові Fortran
- два знаки рівності використовуються для перевірки рівності (подібно до
.EQ.
у Fortran'і або одного знаку рівності у BASIC) &&
та||
на відміну від ALGOL'івськихand
таor
(цим вона семантично відрізняється від бітових операторів&
та|
).- велика кількість арифметичних і логічних операторів, на кшталт
+=
,++
,&=
,……
Відсутня функціональність
С має брак наступних можливостей, які є в інших мовах програмування, (хоча далеко не завжди брак деяких можливостей, наявних в якихось мовах, є недоліком):
- Відсутність нескалярних операцій, на зразок копіювання масивів або рядків.
- Відсутність автоматичного керування пам'яттю (збір сміття)
- Відсутня перевірка меж масиву
- Відсутність напівдинамічних масивів аж до С99
- Відсутність синтаксису для масивів, на зразок А..В, котрі використовують, як старіші, так і новіші мови програмування
- Відсутність вкладених функцій (хоча, ця можливість є з деякими компіляторами, наприклад GCC). Однак знову ж, є суперечливою сама потреба вкладених функцій.
- Відсутність обробки винятків
- Відсутність рудиментарної підтримки модульного програмування
- Відсутність статичного поліморфізму у формі перевантаження функцій або операторів
- Відсутність підтримки об'єктноорієнтованого програмування
- Відсутність вбудованої підтримки багатозадачності та роботи з мережами, хоча ці можливості забезпечуються популярними бібліотеками
- Відсутність стандартних бібліотек для роботи з графікою та деяких інших бібліотек для прикладного програмування
Ці моменти абсолютно не завадили мові бути добре прийнятою спеціалістами. Швидко були створені компілятори для різних платформ. А значною мірою низькорівнева природа мови, надала програмістам можливість якісно контролювати роботу програм, дозволяючи оптимізувати їх під конкретні завдання. Це дозволило кодові ефективно працювати на дуже обмеженому апаратному забезпеченні, такому як вбудовані системи, що сьогодні мають таку високу функціональність завдяки початковому використанню мови С.
Можливості мови підвищуються у спосіб використання сторонніх бібліотек. Більшість об'єктноорієнтованих функцій включають спеціальний вказівник «цей»(this у C++, Java), який посилається на поточний об'єкт. Передаючи цей вказівник як аргумент функції у С, ті ж функціональні можливості можуть бути використані у С. Для прикладу, у можна написати:
stack->push(val);
у той час, як у С це виглядало б, приміром, так:
push(stack, val);
де аргумент stack у С є вказівником на структуру (struct), що є еквівалентною цьому вказівнику у С++, який є вказівником на об'єкт.
Лексеми
У мові використовуються всі символи латинської абетки, цифри та деякі спеціальні символи.
Символи латинської абетки |
|
Цифри | 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 |
Спеціальні символи | , (кома), ; ,. (крапка), + , - , * , ^ , & (амперсанд), = , ~ (тильда), ! , / , < , > , ( , ) , { , } , [ , ] , | , % , ? , ' (апостроф), " (лапки), : (двокрапка), _ (знак підкреслення), \ , # |
З допустимих символів формуються (лексеми) — ідентифікатори, ключові слова, літерали (константи), знаки операцій та інші роздільники.
Ключові слова
Ключові слова — це слова, значення яких зарезервовано для деяких потреб компілятора.
Ключові слова | Призначення | Стандарт |
---|---|---|
sizeof | Отримання розміру об'єкта чи типа на етапі компіляції | |
typedef | Завдання альтернативного імені типу | |
auto , register | Підказки компілятору щодо місця зберігання змінних | |
extern | Вказівка компілятору шукати об'єкт поза поточним файлом | |
static | Оголошення статичного об'єкта | |
void | Маркер відсутності значення; у покажчиках означає довільні дані | |
char , short ,int , long | Цілочисленні типи та модифікатори їхнього розміру | |
signed , unsigned | Модифікатори цілих типів, що визначають їх як знакові чи беззнакові | |
float , double | Дійсні типи даних | |
const | Модифікатор, що унеможливлює зміну деякого значення | |
volatile | Вказівка компілятору на можливість зміни значення змінної ззовні | |
struct | Тип даних — структура з набором полів | |
enum | Тип даних, що зберігає одне з набору цілих значень | |
union | Тип даних, у якому можна зберігати дані одного з декількох обраних типів | |
do , for , while | Оператори циклу | |
if , else | Умовний оператор | |
switch , case , default | Оператор вибору за цілим параметром | |
break , continue | Оператори переривання циклу | |
goto | Оператор безумовного переходу | |
return | Повернення з функції | |
inline | Оголошення вбудовуваної функції | C99 |
restrict | Оголошення покажчика, який посилається на блок пам'яті, на який не посилається ніякий інший покажчик | |
_Bool | Логічний тип даних | |
_Complex , _Imaginary | Типи, використовувані у обчисленнях з комплексними числами | |
_Atomic | Модифікатор типу, який робить його атомарним | C11 |
_Alignas | Явне завдання вирівнювання в байтах для даних | |
_Alignof | Отримання вирівнювання для заданого типу даних на етапі компіляції | |
_Generic | Вибір одного з набору значень на етапі компіляції, виходячи з контрольованого типу даних | |
_Noreturn | Вказівка компілятору, що функція неспроможна завершуватися нормально (тобто за допомогою оператора return ) | |
_Static_assert | Вказівка тверджень, які перевіряються на етапі компіляції | |
_Thread_local | Оголошення локальної для потоку змінної |
Типи даних
Історія
Рання розробка
Початковий етап розробки Сі відбувся у стінах Bell Labs між 1969 та 1973 роками; Деніс Рітчі стверджує, що найбільш творчим був 1972 рік. Мову було названо «Сі» через те, що багато її можливостей було отримано від раніше створеної мови B.
Існує чимало легенд щодо походження мови Сі, і пов'язаної з нею операційної системи UNIX, серед них:
- Розробка Сі стала результатом того, що його майбутні автори любили комп'ютерну гру, схожу на популярну гру Asteroids (Астероїди). Вони вже давно грали у неї на головному сервері компанії, який був недостатньо потужним, і повинен був обслуговувати близько ста користувачів. Томпсон і Рітчі вирішилили, що їм не вистачає контролю над космічним кораблем для того, щоб уникати зіткнень з деякими каменями. Тому вони вирішили перенести гру на вільний PDP-7, що стоїть в офісі. Проте цей комп'ютер не мав операційної системи, що змусило їх її написати. Врешті-решт, вони вирішили перенести цю операційну систему ще й на офісний PDP-11, що було дуже важко, оскільки її код був цілком написаний на асемблері. Було винесено пропозицію використати якусь високорівневу портативну мову, щоб можна було легко переносити ОС з одного комп'ютера на іншій. Мова B, яку вони спершу хотіли використати, виявилася позбавленою функціональності, здатної використовувати нові можливості PDP-11. Тому вони й зупинилися на розробці мови С.
- Найперший комп'ютер, для якого була спочатку написана UNIX, призначався для створення системи автоматичного заповнення документів. Перша версія UNIX була написана на асемблері. Пізніше для того, щоб переписати цю операційну систему, була розроблена мова С.
До 1974 року мова С стала достатньо функціональною для того, щоб переписати на ній більшу частину ядра UNIX, котре спершу було написане на асемблері PDP-11. Це було перше ядро операційної системи реалізоване не на асемблері.
K&R C
У 1978 році Браян Керніган та Денніс Рітчі опублікували першу редакцію книги «Мова програмування Сі». Ця книга, відома серед програмістів як «K&R». Описану у ній версію мови Сі, часто називають «K&R». Друга редакція цієї книги присвячена пізнішому стандарту ANSI C, описаному нижче.
K&R описує такі особливості мови:
- Тип даних
struct
- Тип даних
long int
- Тип даних
unsigned int
- Оператор
=-
було змінено на-=
, щоби позбутися семантичної двозначності створюваної конструкціями, на зразокi=-10
, яка могла інтерпретуватися, якi =- 10
абоi = -10
K&R часто вважають найголовнішою частиною мови, яку повинен підтримувати компілятор С. Багато років, навіть після виходу ANSI C, він вважався мінімальним рівнем, якого слід було дотримуватися програмістам, охочим добитися від своїх програм максимальної портативності, оскільки не всі компілятори тоді підтримували ANSI C, а код на K&R C був сумісним і з ANSI C.
У ранніх версіях C, лише функції, що повертають значення з типом відмінним від int повинні були бути оголошеними, якщо вони використовувалися перед визначенням функції; функції без попереднього оголошення повинні повертати лише ціле число.
Для прикладу:
long int SomeFunction(); int OtherFunction();
int CallingFunction() { long int test1; int test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }
У цьому прикладі, як SomeFunction, так і OtherFunction були оголошені перед своїм використанням. У K&R оголошенням OtherFunction можна було знехтувати.
Оскільки декларація функцій у K&R C не включає ніякої інформації про аргументи функції, перевірка типу параметрів не виконується, хоча деякі компілятори видають попереджувальне повідомлення, якщо до локальної функції звертаються із неправильним числом аргументів, або якщо багаторазові виклики до зовнішньої функції використовують різну кількість аргументів.
Наступні декілька років після публікації K&R C, до мови було додано декілька неофіційних можливостей (у той час, як офіційного нового стандарту не було), котрі підтримувалися компіляторами від AT&T та деяких інших постачальників. Серед них:
- функції з типом результату void;
- функції, що повертають значення типу struct або union (а не вказівник)
- присвоєння для типу struct
- Визначник , котрий робив об'єкт доступним лише для читання
- Перелічувані типи даних
Велика кількість доповнень і відсутність стандартної бібліотеки, разом із великою популярністю мови, створили нагальну потребу у стандартизації.
ANSI C
Наприкінці 1970-х, мова C випередила BASIC, і стала найпопулярнішою мовою програмування для мікрокомп'ютерів. Протягом 1980-х, її прийняли для використання в IBM PC, і її популярність почала зростати досить стрімкими темпами. Разом з тим, Б'ярн Страуструп та інші працівники Bell Labs розпочали роботу над доданням об'єктноорієнтованих конструкцій до C, що призвело до виникнення .
У 1983, Американський Національний Інститут Стандартів (ANSI) сформував комітет X3J11 для створення стандартної специфікації для мови C. У 1989, стандарт був ратифікований як ANSI X3.159-1989 «Мова Програмування C». Цю версію часто називають ANSI C, Стандартний C, або С89.
У 1990, стандарт (з декількома незначними модифікаціями) ANSI C ратифікувала Міжнародна Організація із Стандартизації (ISO), ISO/IEC 9899:1990. Цю версію іноді називають C90. Тому, терміни «C89» і «C90» по суті, позначають одну мову.
ANSI, як і інші інститути із стандартизації, більше самотужки не займається розвитком стандарту мови програмування С. Прийняття стандарту національними інститутами, як правило, відбувається протягом року після публікації стандарту ANSI.
Одна з цілей процесу стандартизації мови С полягала у розробці надмножини над K&R C, яка включала б чимало неофіційних можливостей. Комітети зі стандартизації також додали чимало додаткових функцій, як то прототипи функцій (запозичені в C++), вказівники void, підтримку міжнародних наборів символів та мов і локалей, а також низку розширень для препроцесора. Синтаксис декларації параметрів також було розширено використовуючи запозичення з С++, хоча, інтерфейс K&R також допускається для збереження зворотної сумісності зі старим кодом.
C89 наразі підтримується усіма компіляторами С, і більшість теперішнього коду написано на базі даного стандарту. Будь-яка програма написана на стандартній С, і без використання апаратно залежних засобів може бути скомпільована і запущена на будь-якій операційній системі та апаратній архітектурі без будь-яких обмежень ресурсів.
Стандарт C99
Після процесу стандартизації ANSI, специфікація мови C протягом якогось часу залишилася відносно статичною, тоді як продовжувала еволюціонувати, значною мірою завдяки своїм власним зусиллям зі стандартизації. Нормативна Поправка 1, створила новий стандарт для мови C у 1995 (ISO/IEC 9899/AMD1:1995, неформально відомий як C95), але лише для того, щоб виправити деякі деталі стандарту C89 і додати просторішу підтримку міжнародних наборів символів. Проте, стандарт знову переглянули, опублікувавши версію ISO 9899:1999 у 1999 році. Цей стандарт зазвичай називають «C99». Він був прийнятий, як стандарт ANSI у березні 2000.
Стандарт C99 ввів декілька нових особливостей, багато з яких вже були реалізовані у декількох компіляторах:
- Вкладені функції
- Змінні можуть оголошуватися будь-де (як у C++)
- Введено декілька нових типів даних, зокрема, long long int, явний логічний (булевий) тип даних, і комплексний тип для представлення комплексних чисел
- Масиви зі змінними довжинами
- Підтримка коротких, однорядкових коментарів, що починаються з
//
, як у BCPL та - Нові бібліотечні функції, як наприклад
sprintf
- Нові заголовні файли, як то
stdbool.h
таinttypes.h
- Вдосконалена підтримка стандарту IEEE для роботи з рухомою комою
- Виправлено друкарські огріхи.
C99 сумісний з C90, однак, має деякі відмінності; зокрема, якщо в декларації ідентифікатора не вистачає специфікатора типу, змінна чи функція надалі не сприймається оголошеною неявно як int
. Комітет стандартів вирішив, що важливіше, щоби компілятори діагностували неуважне упущення специфікатора типу, ніж мовчки обробляли код. На практиці, компілятори, ймовірно, діагностують упущення, але й приймають змінну оголошеною як int і продовжують переклад програми.
GNU Compiler Collection та інші[] компілятори C підтримують багато з нових можливостей C99. Проте, вони меншою мірою[] підтримуються компіляторами таких компаній, як Microsoft і Borland, котрі зосередилися переважно на , відтоді, як забезпечує подібну функціональність.
Стандарт C11
Міжнародна організація зі стандартизації (ISO) у грудні 2011 опублікувала оновлений варіант стандарту для мови Сі — ISO/IEC 9899:2011, що був створений під кодовим ім'ям C1X і прийшов на зміну стандарту C99. Оскільки стандарт розвивався досить тривалий час, пройшовши стадії випуску декількох чорнових редакцій, сучасні компілятори, такі як GCC 4.6 і LLVM 3.0, уже підтримують більшість описаних у специфікації можливостей.
У новій специфікації збільшена сумісність з мовою і представлені деякі нові можливості, такі як
- підтримка багатонитковості,
- підтримка Unicode,
- вилучено функцію gets,
- інтерфейс для перевірки допустимих меж і діапазонів значень,
- анонімні структури та об'єднання (наприклад, можна вкласти блок union в struct),
- додаткова функція для миттєвого виходу з програми quick_exit,
- статичні твердження (Static assertions),
- залучення додаткових макросів для перевірки чисел з рухомою комою.
Фінальний текст стандарту не доступний для вільного завантаження (тільки платне завантаження), але можна завантажити останню чорнову редакцію (PDF, 3.6 Мб, 701 стор.) [ 25 грудня 2021 у Wayback Machine.], яка майже не відрізняється від затвердженої специфікації.
Використання
Одним із наслідків значного поширення та ефективності С є те, що компілятори, бібліотеки та інтерпретатори багатьох інших високорівневих мов програмування реалізуються на С.
С використовується як деякими високорівневими мовами програмування. Це здійснюється одним із двох наступних способів:
- Продукується текст програми мовою C паралельно з іншим вихідним кодом: машинним, об'єктним та/або двійковим. Наприклад, така поведінка характерна для деяких діалектів мови Lisp (Lush).
- Продукується виключно текст на С. Приклади: Eiffel, Sather, Esterel.
Вихідний текст програми на С передається компілятору С, який видає кінцевий машинний або двійковий код. Це зроблено задля платформонезалежності (компілятори мови С існують майже для усіх платформ) і уникання необхідності розвитку специфічних для машини генераторів команд.
Завдяки величезній популярності мови програмування C, останні стандарти мови Фортран ввели механізм сумісності, що дозволяє просту і стандартизовану взаємодію між програмами на Фортран та C. Сумісність досягається на майже усіх основних рівнях: вбудованих і похідних типів, вказівників, змінних, функцій та процедур.
Бібліотеки
Мова програмування С використовує бібліотеки, як основний засіб свого розширення. У С, бібліотека — набір функцій, котрі містяться в одному файлі. Кожна бібліотека зазвичай має заголовний файл, в якому містяться прототипи функцій, присутніх у бібліотеці, а також декларації спеціальних типів даних і макросимволів, що використовують ці функції. Для того, щоб програма використовувала бібліотеку, заголовний файл цієї бібліотеки має бути оголошений вгорі файлу із сирцевим кодом, і бібліотека має бути злінкованою з програмою, що у багатьох випадках вимагає спеціальної опції для компілятора (наприклад, -lmath).
Загальною бібліотекою С є стандартна бібліотека С , що вказана в ISO та ANSI C стандартах, і розповсюджується з кожним сучасним компілятором мови С.
Іншим загальним набором функцій стандартної бібліотеки С є той, що використовується застосунками. Проєктувалися вони для UNIX-подібних систем, у першу чергу, для забезпечення інтерфейсу до ядра. Ці функції деталізуються у різноманітних стандартах, на кшталт POSIX та Single UNIX Specification.
Відтоді, як С набула великої популярності, для неї було написано чимало інших бібліотек. Бібліотеки часто пишуться на С, оскільки компілятори C генерують ефективний об'єктний код; пізніше програмісти створюють інтерфейси до бібліотек таким чином, що ті можуть використовуватися високорівневими мовами, на кшталт Java, Perl та Python.
Критика
Попри її велику популярність, С часто критикується. В основному критика зосереджена на тому, що, використовуючи C, важко здійснити деякі бажані дії, і на тому, що, використовуючи C, дуже легко здійснити деякі небажані дії. Коротко кажучи, ефективне використання С вимагає від програміста більше навичок, досвіду та зусиль, ніж це потрібно для деяких інших мов програмування.
Пов'язані мови
Коли об'єктноорієнтовані мови стали популярними, і Objective-C були двома різними продовженнями C, які забезпечували об'єктноорієнтовані можливості. Обидві мови спочатку функціонували, як препроцесори — написаний на них код спочатку переводився на C, а потім компілювався компілятором C.
С++
Мову програмування , розроблену на основі С, було отримано унаслідок додавання Б'ярном Страуструпом до неї об'єктноорієнтованої функціональності із C-подібним синтаксисом.
Objective-C
Objective-C — дуже «тонка» надбудова над С, яка дозволяє об'єктноорієнтоване програмування використовуючи гібрид динамічної/статичної парадигми типів. Основу синтаксису Objective-C склав синтаксис мови С, однак, синтаксис для його об'єктноорієнтованих можливостей був запозичений у Smalltalk. Objective-C та відрізняються своєю філософією — для більшої інформації, читайте відповідні статті.
С#
Мова програмування C# заснована на строгій компонентній архітектурі і реалізує передові механізми забезпечення безпеки коду. C# об'єднала найкращі риси цілого ряду попередників.
Див. також
Коментарі
- Макрос
bool
із заголовного файлуstdbool.h
є обгорткою над ключовим словом_Bool
. - Макрос
complex
із заголовного файлуcomplex.h
є обгорткою над ключовим словом_Complex
. - Макрос
imaginary
із заголовного файлуcomplex.h
є обгорткою над ключовим словом_Imaginary
. - Макрос
alignas
із заголовного файлує обгорткою над ключовим словом
_Alignas
. - Макрос
alignof
із заголовного файлує обгорткою над ключовим словом
_Alignof
. - Макрос
noreturn
із заголовного файлує обгорткою над ключовим словом
_Noreturn
. - Макрос
static_assert
із заголовного файлуassert.h
є обгорткою над ключовим словом_Static_assert
. - Макрос
thread_local
із заголовного файлує обгорткою над ключовим словом
_Thread_local
.
Примітки
- Stewart, Bill (7 січня 2000). History of the C Programming Language. Living Internet. Архів оригіналу за 22 червня 2013. Процитовано 31 жовтня 2006.
- Patricia K. Lawlis, c.j. kemp systems, inc. (1997). Guidelines for Choosing a Computer Language: Support for the Visionary Organization. Ada Information Clearinghouse. Архів оригіналу за 22 червня 2013. Процитовано 18 липня 2006.
- Programming Language Popularity. 2009. Архів оригіналу за 27 травня 2012. Процитовано 16 січня 2009.
- TIOBE Programming Community Index. 2009. Архів оригіналу за 22 червня 2013. Процитовано 16 січня 2009.
- IEEE Spectrum опублікувала рейтинг найпопулярніших мов програмування 2023 року. // Автор: Артем Житкевич. 30.08.2023
- Bjarne Stroustrup. (англ.). Архів оригіналу за 17 червня 2008. Процитовано 8 січня 2009.
- Ritchie, Dennis. The Development of the C Language. Архів оригіналу за 22 червня 2013. Процитовано 26 липня 2006.
- Brian W. Kernighan and Dennis M. Ritchie: The C Programming Language, 2nd ed., Prentice Hall, 1988, c. 3
- ISO/IEC 9899:1990/Amd 1:1995. ISO (англ.). Процитовано 23 лютого 2024.
- . Архів оригіналу за 7 січня 2012. Процитовано 22 грудня 2011.
- Eiffel Language. Eiffel Software - The Home of EiffelStudio. Процитовано 23 лютого 2024.
Посилання
- Сі // Універсальний словник-енциклопедія. — 4-те вид. — К. : Тека, 2006.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
C ukr Si universalna procedurna imperativna mova programuvannya zagalnogo priznachennya rozroblena u 1972 roci Dennisom Ritchi u Bell Telephone Laboratories z metoyu napisannya neyu operacijnoyi sistemi UNIX CParadigma imperativna procedurna Data poyavi 1972Tvorci Dennis RitchiRozrobnik Dennis Ritchi ta Bell LabsSistema tipizaciyi statichna slabkaOsnovni realizaciyi GCC MSVC Dialekti K amp R C 1978 ANSI C 1989 C90 1990 C99 1999 C11 2011 Pid vplivom vid B BCPL Assembler Pascal FORTRANVplinula na awk csh C Objective C D Java Javascript PythonOperacijna sistema Windows i UNIX podibni operacijni sistemiZvichajni rozshirennya fajliv c abo hVebsajt iso org standard 74528 html Mediafajli u Vikishovishi Hocha S i bulo rozrobleno dlya napisannya sistemnogo programnogo zabezpechennya narazi vona dosit chasto vikoristovuyetsya dlya napisannya prikladnogo programnogo zabezpechennya S imovirno ye najpopulyarnishoyu u sviti movoyu programuvannya za kilkistyu vzhe napisanogo neyu programnogo zabezpechennya dostupnogo pid vilnimi licenziyami kodu ta kilkosti programistiv kotri yiyi znayut Versiyi kompilyatoriv dlya movi S isnuyut dlya bagatoh operacijnih sistem ta aparatnih arhitektur C zdijsnila velikij vpliv na inshi movi programuvannya osoblivo na C yaku spochatku proyektuvali yak rozshirennya dlya S a takozh na Java ta C yaki zapozichili u S sintaksis V 2023 roci u kategoriyi najpopulyarnishih mov programuvannya sered IT specialistiv zgidno rejtingu IEEE Spectrum yakij ohoplyuvav 59 mov programuvannya top 5 viglyadav tak Python Java C C JavaScript FilosofiyaS minimalistichna mova programuvannya Sered yiyi golovnih cilej mozhlivist pryamolinijnoyi realizaciyi kompilyaciyi vikoristovuyuchi vidnosno prostij kompilyator zabezpechiti nizkorivnevij dostup do operativnoyi pam yati formuvati lishe kilka instrukcij mashinnoyi movi dlya kozhnogo elementu movi i ne vimagati velikoyi dinamichnoyi pidtrimki U rezultati kod S pridatnij dlya bilshosti sistemnogo programnogo zabezpechennya yake tradicijno pisali asemblerom Popri yiyi nizkorivnevi mozhlivosti movu proyektuvali dlya platformonezalezhnogo programuvannya Sumisna zi standartami ta platformonezalezhna napisana movoyu C programa mozhe legko kompilyuvatisya na velikij kilkosti aparatnih platform ta operacijnih sistem z minimalnimi zminami Mova stala dostupnoyu dlya velikoyi kilkosti platform vid vbudovanih mikrokontroleriv do superkomp yuteriv Minimalizm Movu S proyektuvali z rozrahunkom na te shob vikoristovuvati u sistemnomu programuvanni Otzhe vona ne vimagaye dodatkovogo chasu na vikonannya perevirok riznomanitnih umov yaki nikoli ne vidbudutsya u pravilno napisanij programi a zabezpechuye prostij pryamij dostup do adresi bud yakogo ob yekta napriklad karti pam yati pristroyu kontrolyu registriv i yiyi pochatkovij kod kompilyuyetsya u poslidovnist primitivnih mashinnih operacij B yarn Straustrup yakos napisav pro neyi S robit tak shob vam bulo legko vistriliti sobi v nogu Inshimi slovami S dozvolyaye zdijsnennya nizki operacij kotri chasto ye nebazhanimi a tomu chimalo pomilok u kodi ne viyavlyaye kompilyator i voni ne mozhut buti ochevidnimi pid chas vikonannya Yaksho pid chas programuvannya ta pidtrimki programnogo zabezpechennya ne dotrimuvatisya nizki suvorih pravil piznishe mozhe viniknuti nemalo problem zi shvidkodiyeyu stabilnistyu ta bezpekoyu programnogo zabezpechennya Hocha vinoyu podibnih problem najchastishe ye programisti bo S sama po sobi zabezpechuye nizkij riven zahistu Z chasom bulo rozrobleno bagato utilit dlya dodatkovih perevirok kodu na nayavnist pomilok pered kompilyaciyeyu ta pid chas jogo roboti Nisho ne zavazhaye kompilyatorovi zdijsnyuvati dodatkovi perevirki kodu ne peredbacheni specifikaciyeyu movi odnak dlya deyakogo sistemnogo programnogo zabezpechennya voni ye nepripustimimi bo zmenshuyut shvidkist vikonannya kodu U vidpovid na kritiku movi C yak silno tipizovanoyi movi Kernigan ta Ritchi poslalisya na osnovu filosofiyi dizajnu C Z usim tim C zberigaye osnovnij princip yakij peredbachaye sho programisti dobre znayut sho voni roblyat i vimagaye lishe shob voni chitko davali kompilyatorovi znati pro svoyi namiri HarakteristikaYak i bilshist imperativnih mov zasnovanih na tradiciyi ALGOL C maye mozhlivosti dlya strukturnogo programuvannya i dozvolyaye zdijsnyuvati rekursiyi u toj chas yak sistema statichnoyi tipizaciyi danih zapobigaye viniknennyu bagatoh neperedbachuvanih operacij U S uves vikonuvanij kod mistitsya u funkciyah Parametri funkciyi zavzhdi peredayutsya za znachennyami Peredacha parametriv za vkazivnikom realizovuyetsya shlyahom peredachi znachennya vkazivnika Geterogenni sukupnosti tipiv danih strukturi dozvolyayut pov yazanim tipam danih buti ob yednanimi i manipulyuvati nimi yak yedinim cilim C takozh maye taki specifichni vlastivosti zminni mozhut buti prihovanimi u vkladenih blokah slabka tipizaciya napriklad simvoli mozhut vikoristovuvatisya yak cili chisla nizkorivnevij dostup do operativnoyi pam yati shlyahom peretvorennya mashinnih adres na vkazivniki vkazivniki na funkciyi i dani pidtrimuyut dinamichnij polimorfizm indeksaciya masiviv yak vtorinne ponyattya viznachayetsya u terminah arifmetiki vkazivnikiv standartizovanij preprocesor C dlya makrooznachennya vklyuchennya fajlu z dzherelnim kodom umovnoyi translyaciyi tosho vidsutnist vbudovanih operatoriv vvodu vivodu potokiv obrobki ryadkiv i chisel z ruhomoyu komoyu Vsya cya funkcionalnist realizuyetsya u bibliotekah vikonannya vidnosno nevelika kilkist zarezervovanih sliv 32 u S89 i 37 u C99 Leksichni strukturi yaki nagaduyut B bilshe za ALGOL napriklad na vidminu vid ALGOL ivskogo begin end znak rivnosti dlya priznachennya kopiyuvannya yak ce robitsya u movi Fortran dva znaki rivnosti vikoristovuyutsya dlya perevirki rivnosti podibno do EQ u Fortran i abo odnogo znaku rivnosti u BASIC amp amp ta na vidminu vid ALGOL ivskihand ta or cim vona semantichno vidriznyayetsya vid bitovih operatoriv amp ta velika kilkist arifmetichnih i logichnih operatoriv na kshtalt amp Vidsutnya funkcionalnist S maye brak nastupnih mozhlivostej yaki ye v inshih movah programuvannya hocha daleko ne zavzhdi brak deyakih mozhlivostej nayavnih v yakihos movah ye nedolikom Vidsutnist neskalyarnih operacij na zrazok kopiyuvannya masiviv abo ryadkiv Vidsutnist avtomatichnogo keruvannya pam yattyu zbir smittya Vidsutnya perevirka mezh masivu Vidsutnist napivdinamichnih masiviv azh do S99 Vidsutnist sintaksisu dlya masiviv na zrazok A V kotri vikoristovuyut yak starishi tak i novishi movi programuvannya Vidsutnist vkladenih funkcij hocha cya mozhlivist ye z deyakimi kompilyatorami napriklad GCC Odnak znovu zh ye superechlivoyu sama potreba vkladenih funkcij Vidsutnist obrobki vinyatkiv Vidsutnist rudimentarnoyi pidtrimki modulnogo programuvannya Vidsutnist statichnogo polimorfizmu u formi perevantazhennya funkcij abo operatoriv Vidsutnist pidtrimki ob yektnooriyentovanogo programuvannya Vidsutnist vbudovanoyi pidtrimki bagatozadachnosti ta roboti z merezhami hocha ci mozhlivosti zabezpechuyutsya populyarnimi bibliotekami Vidsutnist standartnih bibliotek dlya roboti z grafikoyu ta deyakih inshih bibliotek dlya prikladnogo programuvannya Ci momenti absolyutno ne zavadili movi buti dobre prijnyatoyu specialistami Shvidko buli stvoreni kompilyatori dlya riznih platform A znachnoyu miroyu nizkorivneva priroda movi nadala programistam mozhlivist yakisno kontrolyuvati robotu program dozvolyayuchi optimizuvati yih pid konkretni zavdannya Ce dozvolilo kodovi efektivno pracyuvati na duzhe obmezhenomu aparatnomu zabezpechenni takomu yak vbudovani sistemi sho sogodni mayut taku visoku funkcionalnist zavdyaki pochatkovomu vikoristannyu movi S Mozhlivosti movi pidvishuyutsya u sposib vikoristannya storonnih bibliotek Bilshist ob yektnooriyentovanih funkcij vklyuchayut specialnij vkazivnik cej this u C Java yakij posilayetsya na potochnij ob yekt Peredayuchi cej vkazivnik yak argument funkciyi u S ti zh funkcionalni mozhlivosti mozhut buti vikoristani u S Dlya prikladu u C mozhna napisati stack gt push val u toj chas yak u S ce viglyadalo b primirom tak push stack val de argument stack u S ye vkazivnikom na strukturu struct sho ye ekvivalentnoyu comu vkazivniku u S yakij ye vkazivnikom na ob yekt Sintaksis i semantikaLeksemi Abetka movi U movi vikoristovuyutsya vsi simvoli latinskoyi abetki cifri ta deyaki specialni simvoli Sklad abetki movi programuvannya C Simvoli latinskoyi abetki A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z Cifri 0 1 2 3 4 5 6 7 8 9 Specialni simvoli koma krapka amp ampersand tilda lt gt apostrof lapki dvokrapka znak pidkreslennya Z dopustimih simvoliv formuyutsya leksemi identifikatori klyuchovi slova literali konstanti znaki operacij ta inshi rozdilniki Klyuchovi slova Klyuchovi slova ce slova znachennya yakih zarezervovano dlya deyakih potreb kompilyatora Klyuchovi slova movi C Klyuchovi slova Priznachennya Standart b sizeof b Otrimannya rozmiru ob yekta chi tipa na etapi kompilyaciyi b typedef b Zavdannya alternativnogo imeni tipu b auto b b register b Pidkazki kompilyatoru shodo miscya zberigannya zminnih b extern b Vkazivka kompilyatoru shukati ob yekt poza potochnim fajlom b static b Ogoloshennya statichnogo ob yekta void Marker vidsutnosti znachennya u pokazhchikah oznachaye dovilni dani b char b b short b b int b b long b Cilochislenni tipi ta modifikatori yihnogo rozmiru b signed b b unsigned b Modifikatori cilih tipiv sho viznachayut yih yak znakovi chi bezznakovi b float b b double b Dijsni tipi danih b const b Modifikator sho unemozhlivlyuye zminu deyakogo znachennya b volatile b Vkazivka kompilyatoru na mozhlivist zmini znachennya zminnoyi zzovni b struct b Tip danih struktura z naborom poliv b enum b Tip danih sho zberigaye odne z naboru cilih znachen a href wiki D0 9E D0 B1 27 D1 94 D0 B4 D0 BD D0 B0 D0 BD D0 BD D1 8F D1 81 D1 82 D1 80 D1 83 D0 BA D1 82 D1 83 D1 80 D0 B0 D0 B4 D0 B0 D0 BD D0 B8 D1 85 title Ob yednannya struktura danih b union b a Tip danih u yakomu mozhna zberigati dani odnogo z dekilkoh obranih tipiv b do b b for b b while b Operatori ciklu b if b b else b Umovnij operator b switch b b case b b default b Operator viboru za cilim parametrom b break b b continue b Operatori pererivannya ciklu b goto b Operator bezumovnogo perehodu b return b Povernennya z funkciyi b inline b Ogoloshennya vbudovuvanoyi funkciyi C99 b restrict b Ogoloshennya pokazhchika yakij posilayetsya na blok pam yati na yakij ne posilayetsya niyakij inshij pokazhchik b Bool b Logichnij tip danih b Complex b b Imaginary b Tipi vikoristovuvani u obchislennyah z kompleksnimi chislami b Atomic b Modifikator tipu yakij robit jogo atomarnim C11 b Alignas b Yavne zavdannya virivnyuvannya v bajtah dlya danih b Alignof b Otrimannya virivnyuvannya dlya zadanogo tipu danih na etapi kompilyaciyi b Generic b Vibir odnogo z naboru znachen na etapi kompilyaciyi vihodyachi z kontrolovanogo tipu danih b Noreturn b Vkazivka kompilyatoru sho funkciya nespromozhna zavershuvatisya normalno tobto za dopomogoyu operatora return b Static assert b Vkazivka tverdzhen yaki pereviryayutsya na etapi kompilyaciyi b Thread local b Ogoloshennya lokalnoyi dlya potoku zminnoyi Tipi danih Dokladnishe Tipi danih movi CIstoriyaRannya rozrobka Pochatkovij etap rozrobki Si vidbuvsya u stinah Bell Labs mizh 1969 ta 1973 rokami Denis Ritchi stverdzhuye sho najbilsh tvorchim buv 1972 rik Movu bulo nazvano Si cherez te sho bagato yiyi mozhlivostej bulo otrimano vid ranishe stvorenoyi movi B Isnuye chimalo legend shodo pohodzhennya movi Si i pov yazanoyi z neyu operacijnoyi sistemi UNIX sered nih Rozrobka Si stala rezultatom togo sho jogo majbutni avtori lyubili komp yuternu gru shozhu na populyarnu gru Asteroids Asteroyidi Voni vzhe davno grali u neyi na golovnomu serveri kompaniyi yakij buv nedostatno potuzhnim i povinen buv obslugovuvati blizko sta koristuvachiv Tompson i Ritchi virishilili sho yim ne vistachaye kontrolyu nad kosmichnim korablem dlya togo shob unikati zitknen z deyakimi kamenyami Tomu voni virishili perenesti gru na vilnij PDP 7 sho stoyit v ofisi Prote cej komp yuter ne mav operacijnoyi sistemi sho zmusilo yih yiyi napisati Vreshti resht voni virishili perenesti cyu operacijnu sistemu she j na ofisnij PDP 11 sho bulo duzhe vazhko oskilki yiyi kod buv cilkom napisanij na asembleri Bulo vineseno propoziciyu vikoristati yakus visokorivnevu portativnu movu shob mozhna bulo legko perenositi OS z odnogo komp yutera na inshij Mova B yaku voni spershu hotili vikoristati viyavilasya pozbavlenoyu funkcionalnosti zdatnoyi vikoristovuvati novi mozhlivosti PDP 11 Tomu voni j zupinilisya na rozrobci movi S Najpershij komp yuter dlya yakogo bula spochatku napisana UNIX priznachavsya dlya stvorennya sistemi avtomatichnogo zapovnennya dokumentiv Persha versiya UNIX bula napisana na asembleri Piznishe dlya togo shob perepisati cyu operacijnu sistemu bula rozroblena mova S Do 1974 roku mova S stala dostatno funkcionalnoyu dlya togo shob perepisati na nij bilshu chastinu yadra UNIX kotre spershu bulo napisane na asembleri PDP 11 Ce bulo pershe yadro operacijnoyi sistemi realizovane ne na asembleri K amp R C U 1978 roci Brayan Kernigan ta Dennis Ritchi opublikuvali pershu redakciyu knigi Mova programuvannya Si Cya kniga vidoma sered programistiv yak K amp R Opisanu u nij versiyu movi Si chasto nazivayut K amp R Druga redakciya ciyeyi knigi prisvyachena piznishomu standartu ANSI C opisanomu nizhche K amp R opisuye taki osoblivosti movi Tip danih struct Tip danih long int Tip danih unsigned int Operator bulo zmineno na shobi pozbutisya semantichnoyi dvoznachnosti stvoryuvanoyi konstrukciyami na zrazok i 10 yaka mogla interpretuvatisya yak i 10 abo i 10 K amp R chasto vvazhayut najgolovnishoyu chastinoyu movi yaku povinen pidtrimuvati kompilyator S Bagato rokiv navit pislya vihodu ANSI C vin vvazhavsya minimalnim rivnem yakogo slid bulo dotrimuvatisya programistam ohochim dobitisya vid svoyih program maksimalnoyi portativnosti oskilki ne vsi kompilyatori todi pidtrimuvali ANSI C a kod na K amp R C buv sumisnim i z ANSI C U rannih versiyah C lishe funkciyi sho povertayut znachennya z tipom vidminnim vid int povinni buli buti ogoloshenimi yaksho voni vikoristovuvalisya pered viznachennyam funkciyi funkciyi bez poperednogo ogoloshennya povinni povertati lishe cile chislo Dlya prikladu long int SomeFunction int OtherFunction int CallingFunction long int test1 int test2 test1 SomeFunction if test1 gt 0 test2 0 else test2 OtherFunction return test2 U comu prikladi yak SomeFunction tak i OtherFunction buli ogolosheni pered svoyim vikoristannyam U K amp R ogoloshennyam OtherFunction mozhna bulo znehtuvati Oskilki deklaraciya funkcij u K amp R C ne vklyuchaye niyakoyi informaciyi pro argumenti funkciyi perevirka tipu parametriv ne vikonuyetsya hocha deyaki kompilyatori vidayut poperedzhuvalne povidomlennya yaksho do lokalnoyi funkciyi zvertayutsya iz nepravilnim chislom argumentiv abo yaksho bagatorazovi vikliki do zovnishnoyi funkciyi vikoristovuyut riznu kilkist argumentiv Nastupni dekilka rokiv pislya publikaciyi K amp R C do movi bulo dodano dekilka neoficijnih mozhlivostej u toj chas yak oficijnogo novogo standartu ne bulo kotri pidtrimuvalisya kompilyatorami vid AT amp T ta deyakih inshih postachalnikiv Sered nih funkciyi z tipom rezultatu void funkciyi sho povertayut znachennya tipu struct abo union a ne vkazivnik prisvoyennya dlya tipu struct Viznachnik kotrij robiv ob yekt dostupnim lishe dlya chitannya Perelichuvani tipi danih Velika kilkist dopovnen i vidsutnist standartnoyi biblioteki razom iz velikoyu populyarnistyu movi stvorili nagalnu potrebu u standartizaciyi ANSI C Dokladnishe ANSI C Naprikinci 1970 h mova C viperedila BASIC i stala najpopulyarnishoyu movoyu programuvannya dlya mikrokomp yuteriv Protyagom 1980 h yiyi prijnyali dlya vikoristannya v IBM PC i yiyi populyarnist pochala zrostati dosit strimkimi tempami Razom z tim B yarn Straustrup ta inshi pracivniki Bell Labs rozpochali robotu nad dodannyam ob yektnooriyentovanih konstrukcij do C sho prizvelo do viniknennya C U 1983 Amerikanskij Nacionalnij Institut Standartiv ANSI sformuvav komitet X3J11 dlya stvorennya standartnoyi specifikaciyi dlya movi C U 1989 standart buv ratifikovanij yak ANSI X3 159 1989 Mova Programuvannya C Cyu versiyu chasto nazivayut ANSI C Standartnij C abo S89 U 1990 standart z dekilkoma neznachnimi modifikaciyami ANSI C ratifikuvala Mizhnarodna Organizaciya iz Standartizaciyi ISO ISO IEC 9899 1990 Cyu versiyu inodi nazivayut C90 Tomu termini C89 i C90 po suti poznachayut odnu movu ANSI yak i inshi instituti iz standartizaciyi bilshe samotuzhki ne zajmayetsya rozvitkom standartu movi programuvannya S Prijnyattya standartu nacionalnimi institutami yak pravilo vidbuvayetsya protyagom roku pislya publikaciyi standartu ANSI Odna z cilej procesu standartizaciyi movi S polyagala u rozrobci nadmnozhini nad K amp R C yaka vklyuchala b chimalo neoficijnih mozhlivostej Komiteti zi standartizaciyi takozh dodali chimalo dodatkovih funkcij yak to prototipi funkcij zapozicheni v C vkazivniki void pidtrimku mizhnarodnih naboriv simvoliv ta mov i lokalej a takozh nizku rozshiren dlya preprocesora Sintaksis deklaraciyi parametriv takozh bulo rozshireno vikoristovuyuchi zapozichennya z S hocha interfejs K amp R takozh dopuskayetsya dlya zberezhennya zvorotnoyi sumisnosti zi starim kodom C89 narazi pidtrimuyetsya usima kompilyatorami S i bilshist teperishnogo kodu napisano na bazi danogo standartu Bud yaka programa napisana na standartnij S i bez vikoristannya aparatno zalezhnih zasobiv mozhe buti skompilovana i zapushena na bud yakij operacijnij sistemi ta aparatnij arhitekturi bez bud yakih obmezhen resursiv Standart C99 Dokladnishe C99 Pislya procesu standartizaciyi ANSI specifikaciya movi C protyagom yakogos chasu zalishilasya vidnosno statichnoyu todi yak C prodovzhuvala evolyucionuvati znachnoyu miroyu zavdyaki svoyim vlasnim zusillyam zi standartizaciyi Normativna Popravka 1 stvorila novij standart dlya movi C u 1995 ISO IEC 9899 AMD1 1995 neformalno vidomij yak C95 ale lishe dlya togo shob vipraviti deyaki detali standartu C89 i dodati prostorishu pidtrimku mizhnarodnih naboriv simvoliv Prote standart znovu pereglyanuli opublikuvavshi versiyu ISO 9899 1999 u 1999 roci Cej standart zazvichaj nazivayut C99 Vin buv prijnyatij yak standart ANSI u berezni 2000 Standart C99 vviv dekilka novih osoblivostej bagato z yakih vzhe buli realizovani u dekilkoh kompilyatorah Vkladeni funkciyi Zminni mozhut ogoloshuvatisya bud de yak u C Vvedeno dekilka novih tipiv danih zokrema long long int yavnij logichnij bulevij tip danih i kompleksnij tip dlya predstavlennya kompleksnih chisel Masivi zi zminnimi dovzhinami Pidtrimka korotkih odnoryadkovih komentariv sho pochinayutsya z yak u BCPL ta C Novi bibliotechni funkciyi yak napriklad sprintf Novi zagolovni fajli yak to stdbool h ta inttypes h Vdoskonalena pidtrimka standartu IEEE dlya roboti z ruhomoyu komoyu Vipravleno drukarski ogrihi C99 sumisnij z C90 odnak maye deyaki vidminnosti zokrema yaksho v deklaraciyi identifikatora ne vistachaye specifikatora tipu zminna chi funkciya nadali ne sprijmayetsya ogoloshenoyu neyavno yak int Komitet standartiv virishiv sho vazhlivishe shobi kompilyatori diagnostuvali neuvazhne upushennya specifikatora tipu nizh movchki obroblyali kod Na praktici kompilyatori jmovirno diagnostuyut upushennya ale j prijmayut zminnu ogoloshenoyu yak int i prodovzhuyut pereklad programi GNU Compiler Collection ta inshi yaki kompilyatori C pidtrimuyut bagato z novih mozhlivostej C99 Prote voni menshoyu miroyu koli pidtrimuyutsya kompilyatorami takih kompanij yak Microsoft i Borland kotri zoseredilisya perevazhno na C vidtodi yak C zabezpechuye podibnu funkcionalnist Standart C11 Dokladnishe C11 Mizhnarodna organizaciya zi standartizaciyi ISO u grudni 2011 opublikuvala onovlenij variant standartu dlya movi Si ISO IEC 9899 2011 sho buv stvorenij pid kodovim im yam C1X i prijshov na zminu standartu C99 Oskilki standart rozvivavsya dosit trivalij chas projshovshi stadiyi vipusku dekilkoh chornovih redakcij suchasni kompilyatori taki yak GCC 4 6 i LLVM 3 0 uzhe pidtrimuyut bilshist opisanih u specifikaciyi mozhlivostej U novij specifikaciyi zbilshena sumisnist z movoyu S i predstavleni deyaki novi mozhlivosti taki yak pidtrimka bagatonitkovosti pidtrimka Unicode vilucheno funkciyu gets interfejs dlya perevirki dopustimih mezh i diapazoniv znachen anonimni strukturi ta ob yednannya napriklad mozhna vklasti blok union v struct dodatkova funkciya dlya mittyevogo vihodu z programi quick exit statichni tverdzhennya Static assertions zaluchennya dodatkovih makrosiv dlya perevirki chisel z ruhomoyu komoyu Finalnij tekst standartu ne dostupnij dlya vilnogo zavantazhennya tilki platne zavantazhennya ale mozhna zavantazhiti ostannyu chornovu redakciyu PDF 3 6 Mb 701 stor 25 grudnya 2021 u Wayback Machine yaka majzhe ne vidriznyayetsya vid zatverdzhenoyi specifikaciyi VikoristannyaThe C Programming Language Odnim iz naslidkiv znachnogo poshirennya ta efektivnosti S ye te sho kompilyatori biblioteki ta interpretatori bagatoh inshih visokorivnevih mov programuvannya realizuyutsya na S S vikoristovuyetsya yak deyakimi visokorivnevimi movami programuvannya Ce zdijsnyuyetsya odnim iz dvoh nastupnih sposobiv Produkuyetsya tekst programi movoyu C paralelno z inshim vihidnim kodom mashinnim ob yektnim ta abo dvijkovim Napriklad taka povedinka harakterna dlya deyakih dialektiv movi Lisp Lush Produkuyetsya viklyuchno tekst na S Prikladi Eiffel Sather Esterel Vihidnij tekst programi na S peredayetsya kompilyatoru S yakij vidaye kincevij mashinnij abo dvijkovij kod Ce zrobleno zadlya platformonezalezhnosti kompilyatori movi S isnuyut majzhe dlya usih platform i unikannya neobhidnosti rozvitku specifichnih dlya mashini generatoriv komand Zavdyaki velicheznij populyarnosti movi programuvannya C ostanni standarti movi Fortran vveli mehanizm sumisnosti sho dozvolyaye prostu i standartizovanu vzayemodiyu mizh programami na Fortran ta C Sumisnist dosyagayetsya na majzhe usih osnovnih rivnyah vbudovanih i pohidnih tipiv vkazivnikiv zminnih funkcij ta procedur BibliotekiMova programuvannya S vikoristovuye biblioteki yak osnovnij zasib svogo rozshirennya U S biblioteka nabir funkcij kotri mistyatsya v odnomu fajli Kozhna biblioteka zazvichaj maye zagolovnij fajl v yakomu mistyatsya prototipi funkcij prisutnih u biblioteci a takozh deklaraciyi specialnih tipiv danih i makrosimvoliv sho vikoristovuyut ci funkciyi Dlya togo shob programa vikoristovuvala biblioteku zagolovnij fajl ciyeyi biblioteki maye buti ogoloshenij vgori fajlu iz sircevim kodom i biblioteka maye buti zlinkovanoyu z programoyu sho u bagatoh vipadkah vimagaye specialnoyi opciyi dlya kompilyatora napriklad lmath Zagalnoyu bibliotekoyu S ye standartna biblioteka S sho vkazana v ISO ta ANSI C standartah i rozpovsyudzhuyetsya z kozhnim suchasnim kompilyatorom movi S Inshim zagalnim naborom funkcij standartnoyi biblioteki S ye toj sho vikoristovuyetsya zastosunkami Proyektuvalisya voni dlya UNIX podibnih sistem u pershu chergu dlya zabezpechennya interfejsu do yadra Ci funkciyi detalizuyutsya u riznomanitnih standartah na kshtalt POSIX ta Single UNIX Specification Vidtodi yak S nabula velikoyi populyarnosti dlya neyi bulo napisano chimalo inshih bibliotek Biblioteki chasto pishutsya na S oskilki kompilyatori C generuyut efektivnij ob yektnij kod piznishe programisti stvoryuyut interfejsi do bibliotek takim chinom sho ti mozhut vikoristovuvatisya visokorivnevimi movami na kshtalt Java Perl ta Python KritikaDokladnishe Popri yiyi veliku populyarnist S chasto kritikuyetsya V osnovnomu kritika zoseredzhena na tomu sho vikoristovuyuchi C vazhko zdijsniti deyaki bazhani diyi i na tomu sho vikoristovuyuchi C duzhe legko zdijsniti deyaki nebazhani diyi Korotko kazhuchi efektivne vikoristannya S vimagaye vid programista bilshe navichok dosvidu ta zusil nizh ce potribno dlya deyakih inshih mov programuvannya Pov yazani moviKoli ob yektnooriyentovani movi stali populyarnimi C i Objective C buli dvoma riznimi prodovzhennyami C yaki zabezpechuvali ob yektnooriyentovani mozhlivosti Obidvi movi spochatku funkcionuvali yak preprocesori napisanij na nih kod spochatku perevodivsya na C a potim kompilyuvavsya kompilyatorom C S Movu programuvannya C rozroblenu na osnovi S bulo otrimano unaslidok dodavannya B yarnom Straustrupom do neyi ob yektnooriyentovanoyi funkcionalnosti iz C podibnim sintaksisom Objective C Objective C duzhe tonka nadbudova nad S yaka dozvolyaye ob yektnooriyentovane programuvannya vikoristovuyuchi gibrid dinamichnoyi statichnoyi paradigmi tipiv Osnovu sintaksisu Objective C sklav sintaksis movi S odnak sintaksis dlya jogo ob yektnooriyentovanih mozhlivostej buv zapozichenij u Smalltalk Objective C ta C vidriznyayutsya svoyeyu filosofiyeyu dlya bilshoyi informaciyi chitajte vidpovidni statti S Mova programuvannya C zasnovana na strogij komponentnij arhitekturi i realizuye peredovi mehanizmi zabezpechennya bezpeki kodu C ob yednala najkrashi risi cilogo ryadu poperednikiv Div takozhOperatori v C ta C B C D Objective CKomentariMakros bool iz zagolovnogo fajlu a href wiki Stdbool h title Stdbool h stdbool h a ye obgortkoyu nad klyuchovim slovom b Bool b Makros complex iz zagolovnogo fajlu a href wiki Complex h title Complex h complex h a ye obgortkoyu nad klyuchovim slovom b Complex b Makros imaginary iz zagolovnogo fajlu a href wiki Complex h title Complex h complex h a ye obgortkoyu nad klyuchovim slovom b Imaginary b Makros alignas iz zagolovnogo fajlu ye obgortkoyu nad klyuchovim slovom b Alignas b Makros alignof iz zagolovnogo fajlu ye obgortkoyu nad klyuchovim slovom b Alignof b Makros noreturn iz zagolovnogo fajlu ye obgortkoyu nad klyuchovim slovom b Noreturn b Makros static assert iz zagolovnogo fajlu a href wiki Assert h title Assert h assert h a ye obgortkoyu nad klyuchovim slovom b Static assert b Makros thread local iz zagolovnogo fajlu ye obgortkoyu nad klyuchovim slovom b Thread local b PrimitkiStewart Bill 7 sichnya 2000 History of the C Programming Language Living Internet Arhiv originalu za 22 chervnya 2013 Procitovano 31 zhovtnya 2006 Patricia K Lawlis c j kemp systems inc 1997 Guidelines for Choosing a Computer Language Support for the Visionary Organization Ada Information Clearinghouse Arhiv originalu za 22 chervnya 2013 Procitovano 18 lipnya 2006 Programming Language Popularity 2009 Arhiv originalu za 27 travnya 2012 Procitovano 16 sichnya 2009 TIOBE Programming Community Index 2009 Arhiv originalu za 22 chervnya 2013 Procitovano 16 sichnya 2009 IEEE Spectrum opublikuvala rejting najpopulyarnishih mov programuvannya 2023 roku Avtor Artem Zhitkevich 30 08 2023 Bjarne Stroustrup angl Arhiv originalu za 17 chervnya 2008 Procitovano 8 sichnya 2009 Ritchie Dennis The Development of the C Language Arhiv originalu za 22 chervnya 2013 Procitovano 26 lipnya 2006 Brian W Kernighan and Dennis M Ritchie The C Programming Language 2nd ed Prentice Hall 1988 c 3 ISO IEC 9899 1990 Amd 1 1995 ISO angl Procitovano 23 lyutogo 2024 Arhiv originalu za 7 sichnya 2012 Procitovano 22 grudnya 2011 Eiffel Language Eiffel Software The Home of EiffelStudio Procitovano 23 lyutogo 2024 PosilannyaSi Universalnij slovnik enciklopediya 4 te vid K Teka 2006