Панель інструментівІншими мовами
|
С (мова програмування)
Cі (англ. C)— універсальна, процедурна, імперативна мова програмування, розроблена у 1972 році Денісом Рітчі у Bell Telephone Laboratories для використання з операційною системою UNIX. Відтоді її версії з'явилися для багатьох інших операційних систем, і наразі Сі є однією з найбільш поширених мов програмування. Cі також здійснив великий вплив на інші мови програмування, особливо на C++, котра спочатку проектувалася, як розширення для Сі. Найчастіше використовується для написання системного програмного забезпечення, хоча, досить часто на ній пишуть і прикладне програмне забезпечення.
[ред.] ФілософіяСі — мінімалістична мова програмування. Серед її головних цілей: можливість прямолінійної реалізації компіляції, використовуючи відносно простий компілятор, забезпечити низькорівневий доступ до оперативної пам'яті, формувати лише декілька інструкцій машинної мови для кожного елементу мови, і не вимагати обширної динамічної підтримки. У результаті, код Сі придатний для більшості системного програмного забезпечення, котре традиційно писалося на асемблері. Незважаючи на її низькорівневі можливості, мова проектувалася для машинно-незалежного програмування. Сумісна зі стандартами та машинно-незалежно написана програма на Сі може легко компілюватися на великій кількості апаратних платформ та операційних систем з мінімальними змінами. Мова стала доступною для великої кількості платформ, від вбудованих мікроконтроллерів до суперкомп'ютерів. [ред.] ХарактеристикаЯк і більшість імперативних мов, заснованих на традиції ALGOL, Сі має наступні характеристики:
Cі також має наступні специфічні властивості:
Сі має брак наступних можливостей, котрі мають інші мови програмування:
Незважаючи на відсутність великої кількості можливостей, мова була добре прийнята, оскільки дозволяла швидко створювати компілятори для нових платформ. Відносно низькорівнева природа мови надає програмістам можливість якісного контролю роботи програм, дозволяючи оптимізовувати їх під конкретні завдання. Це дозволяє кодові ефективно працювати на дуже обмеженому апаратному забезпеченні, як то вбудовані системи, котрі сьогодні мають настільки високу функціональність завдяки первинному використанню мови Сі. Чимало відсутніх можливостей доступні через використання сторонніх бібліотек. Більшість об'єктно-орієнтованих функцій включають спеціальний вказівник "цей", який посилається на поточний об'єкт. Передаючи цей вказівник в якості аргументу функції у Сі, ті ж функціональні можливості можуть бути використані у Сі. Для прикладу, у C++ можна було написати: stack->push(val); у той час, як у С це виглядало б, приміром, так: push(stack, val); де аргумент stack у С є вказівником на стуктуру (struct), котра є еквівалентною даному вказівнику у С++, котрий є вказівником на об'єкт. [ред.] Історія[ред.] Рання розробкаПочатковий етап розробки Сі відбувся у стінах AT&T Bell Labs між 1969 та 1973 роками; Деніс Рітчі стверджує, що найбільш творчим був 1972 рік. Мову було названо "Сі" через те, що багато її можливостей було отримано від раніше створеної мови B. Існує чимало легенд щодо походження мови Сі, і пов'язаної з нею операційної системи UNIX, серед них:
До 1974 року мова С стала достатньо функціональною для того, щоб переписати на ній більшу частину ядра UNIX, котре спершу було написане на асемблері PDP-11. Це було перше ядро операційної системи реалізоване не на асемблері. [ред.] K&R CУ 1978 році Рітчи та Керніган опублікували першу редакцію книги «Мова програмування Сі». Ця книга, відома серед програмістів як «K&R». Описану у ній версію мови Сі, часто називають «K&R». Друга редакція цієї книги присвячена пізнішому стандарту ANSI C, описаному нижче. K&R описує наступні особливості мови:
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 та деяких інших постачальників. Серед них:
Велика кількість доповнень і відсутність стандартної бібліотеки, разом із великою популярністю мови, створили нагальну потребу у стандартизації. [ред.] ANSI CНаприкінці 1970-х, мова C випередила BASIC, і стала найпопулярнішою мовою програмування для мікрокомп'ютерів. Протягом 1980-х, її прийняли для використання в IBM PC, і її популярність почала зростати досить стрімкими темпами. У той же час, Бьярн Страуструп та інші працівники Bell Labs розпочали роботу над доданням об'єктно-орієнтованої конструкцій до C, що призвело до виникнення 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" по суті, позначають одну мову. [ред.] C99Після процесу стандартизації ANSI, специфікація мови C протягом якогось часу залишилася відносно статичною, тоді як C++ продовжувала еволюціонувати, у значній мірі завдяки своїм власним зусиллям по стандартизації. Нормативна Поправка 1, створила новий стандарт для мови C у 1995, але лише для того, щоб виправити деякі деталі стандарту C89 і додати обширнішу підтримки міжнародних наборів символів. Проте, стандарт піддався подальшому перегляду в кінці 1990-х, привівши до публікації ISO 9899:1999 у 1999 році. Цей стандарт зазвичай іменують, як "C99". Він був прийнятий, як стандарт ANSI у березні 2000. Стандарт C99 ввів декілька нових особливостей, багато з яких вже були реалізовані у декількох компіляторах:
C99 сумісний з C90, однак, має деякі відмінності; зокрема, якщо в декларації ідентифікатора не вистачає специфікатора типу, змінна чи функція надалі не сприймається оголошеню неявно як GCC та інші компілятори C наразі підтримують багато з нових можливостей C99. Проте, вони меншою мірою підтримуються компіляторами таких компаній, як Microsoft і Borland, котрі зосередилися переважно на C++, з тих пір, як C++ забезпечує подібну функціональність. [ред.] ВикористанняОдним із наслідків значного поширення та ефективності С є те, що компілятори, бібліотеки та інтерпретатори багатьох інших високорівневих мов програмування реаліуються на С. С використовується, як проміжна мова деякими високорівневими мовами програмування. Це здійснюється одним із двох наступним способів:
Вихідний текст програми на С передається компілятору С, який видає кінцевий машинний або двійковий код. Це зроблено задля переносимості (компілятори мови С існують майже для усіх платформ) і уникання необхідності розвитку специфічних для машини генераторів команд. [ред.] БібліотекиМова програмування С використовує бібліотеки, як основний спосіб свого розширення. У С, бібіліотека — набір функцій, котрі містяться в одному файлі. Кожна бібліотека, за звичай має заголовочний файл, в якому містяться прототипи функцій, присутніх у бібілотеці, котра може використовуватися, а також деклації спеціальних типів даних і макро-символів, котрі використовують ці функції. Для того, щоб програма використовувала бібліотеку, заголовочний файл цієї бібілотеки повинен бути оголошений вгорі джерельного файлу, і бібліотека повинна бути злінкованою до програми, що у багатьох випадках вимагає спеціальної опції для компілятора (наприклад, -lmath). Загальною бібліотекою С є стандартна бібліотека С, котра вказана у ISO та ANSI C стандартах, і розповсюджується з кожним сучасним компілятором мови С. Іншим загальним набором функцій стандартної бібліотеки С є ті, що використовуються додатками. проектувалися вони для UNIX-подібних систем, у першу чергу, для забезпечення інтерфейсу до ядра. Ці функції деталізуються у різноманітних стандартах, на кшталт POSIX та Single UNIX Specification. З тих пір, як С набула великої популярності, для неї було написано чимало інших бібліотек. Бібліотеки часто пишуться на С, оскільки компілятори C ґенерують ефективний об'єктний код; пізніше програмісти створюють інтерфейси до бібліотек таким чином, що ті можуть використовуватися високорівневими мовами, на кшталт Java, Perl та Python. [ред.] КритикаНе дивлячись на її велику популярність, С часто критикується. Двома основними широкими класами, що підпадають під критику є: бажані дії, яких дуже важко досягти використовуючи С, і не бажані дії, які дуже легко випадково здійснити використовуючи С. Коротко кажучи, ефективне використання С вимагає від програміста більше навиків, досвіду та зусиль, ніж це потрібно для деяких інших мов програмуання. [ред.] Пов'язані мовиКоли об'єктно-орієнтовані мови стали популярними, C++ і Objective-C були двома різними продовженнями C, які забезпечували об'єктно-орієнтовані можливості. Обидві мови спочатку функціонували, як препроцесори — написаний на них код спочатку переводився на C, а потім компілювася компілятором C. [ред.] С++Мова програмування C++ розроблена на основі С, і була отримана у наслідок додавання Б’ярном Страуструпом до неї об'єктно-орієнтованої функціональності із C-подібним синтаксисом. [ред.] Objective-CObjective-C — дуже "тонка" надбудова над С, який дозволяє об'єктно-орієнтоване програмування використовуючи гібрид динамічної/статичної парадигми типів. Основу синтаксису Objective-C склав синтаксис мови С, однак, синтаксис для його об'єктно-орієнтованих можливостей був запозичений у Smalltalk. Objective-C та C++ відрізняються своєю філософією — для більшої інформації, читайте відповідні статті. [ред.] Дивіться також |
|||||||||||||||||||||||