- •Історія
- •Елементи Синтаксис
- •Типи даних
- •Класифікація мов програмування
- •Способи реалізації мов [ред.]
- •Процедури та функціі
- •Об'єктно-орієнтоване програмування
- •Семантика мов програмування
- •Мови програмування низького рівня
- •Переваги
- •Недоліки
- •Мови програмування високого рівня
- •П'ять поколінь мов програмування
- •П'яте покоління
- •Філософія
- •Мінімалізм
- •Характеристика
- •Відсутня функціональність
- •Історія Рання розробка
- •Стандарт c99
- •Стандарт c11
- •Використання
- •Бібліотеки
- •Критика
Філософія
С — мінімалістична мова програмування. Серед її головних цілей: можливість прямолінійної реалізації компіляції, використовуючи відносно простий компілятор, забезпечити низькорівневий доступ до оперативної пам'яті, формувати лише декілька інструкцій машинної мови для кожного елементу мови, і не вимагати обширної динамічної підтримки. У результаті, код С придатний для більшості системного програмного забезпечення, яке традиційно писалося асемблером.
Незважаючи на її низькорівневі можливості, мова проектувалася для машинно-незалежного програмування. Сумісна зі стандартами та машинно-незалежно написана мовою C програма, може легко компілюватися на великій кількості апаратних платформ та операційних систем з мінімальними змінами. Мова стала доступною для великої кількості платформ, від вбудованих мікроконтролерів до суперкомп'ютерів.
Мінімалізм
Мова С проектувалась з розрахунком на те, щоб використовуватись у системному програмуванні. Отже, вона не вимагає додаткового часу на виконання перевірок різноманітних умов, які ніколи не відбудуться у правильно написаній програмі, а забезпечує простий, прямий доступ до адреси будь якого об'єкта (наприклад, карти пам'яті, пристрою контролю регістрів), і вираження її джерельного коду може бути переведене у вигляд простої, примітивної машинної операції.
Б'ярн Страуструп якось написав про неї: «С робить так, щоб вам було легко вистрілити собі в ногу»[5] Іншими словами, С дозволяє здійснення низки операцій, котрі часто є не бажаними, а тому чимало помилок у коді не виявляється компілятором, і не можуть бути очевидними під час виконання. Якщо під час програмування та підтримки програмного забезпечення не дотримуватись низки суворих правил, пізніше може виникнути немало проблем зі швидкодією, стабільністю та безпекою програмного забезпечення. (Хоча, виною подібних проблем найчастіше є програмісти, оскільки, С сама по собі забезпечує низький рівень захисту).
З часом було розроблено багато утиліт для додаткових перевірок коду на наявність помилок перед компіляцією та під час його роботи. Ніщо не заважає компілятору здійснювати додаткові перевірки коду, не передбачені специфікацією мови, однак, для деякого системного програмного забезпечення вони є неприпустимими, оскільки, зменшують швидкість виконання коду.
У відповідь на критику мови C, як сильно типізованої мови, Керніган та Рітчі, послались на основу філософії дизайну C: «Тим не менш, C зберігає основний принцип, який передбачає, що програмісти добре знають, що вони роблять, і вимагає лише, щоб вони чітко давали компіляторові знати про свої наміри».[6][7]
Характеристика
Як і більшість імперативних мов, заснованих на традиції АЛГОЛ, C має можливості для структурного програмування і дозволяє здійснювати рекурсії, у той час, як система статичної типізації даних запобігає виникненню багатьох непередбачуваних операцій. У С увесь виконуваний код міститься у функціях. Параметри функції завжди передаються за значеннями. Передача параметрів за вказівником реалізовується шляхом передачі значення вказівника. Гетерогенні сукупності типів даних (структури) дозволяють пов'язаним типам даних бути об'єднаними і маніпулювати ними, як єдиним цілим.
C також має такі специфічні властивості:
змінні можуть бути прихованими у вкладених блоках
слабка типізація; наприклад, символи можуть використовуватися, як цілі числа
низькорівневий доступ до оперативної пам'яті шляхом перетворення машинних адрес вказівники
вказівники на функції і дані підтримують динамічний поліморфізм
масив індексів як вторинне поняття, визначається у термінах арифметики вказівників
стандартизований препроцесор C для макроозначення, включення файлу з джерельним кодом, умовної трансляції, і т. д.
комплексна функціональність, як то I/O, маніпуляція рядками, і делегування математичних функцій бібліотекам
відносно невелика кількість зарезервованих слів (32 у С89, і 37 у C99)
Лексичні структури, які нагадують B більше за ALGOL, наприклад:
{ ... } на відміну від ALGOL'івськогоbegin ... end
знак рівності для призначення (копіювання), як це робиться у мові Fortran
два знаки рівності використовуються для перевірки рівності (подібно до .EQ. у Fortran'і або одного знаку рівності у BASIC)
&& та || на відміну від ALGOL'івськихand та or (цим вона семантично відрізняється від бітових операторів & та |).
велика кількість операторів об'єднання, на кшталт +=, ++, ……
