
- •Історія
- •Елементи Синтаксис
- •Типи даних
- •Класифікація мов програмування
- •Способи реалізації мов [ред.]
- •Процедури та функціі
- •Об'єктно-орієнтоване програмування
- •Семантика мов програмування
- •Мови програмування низького рівня
- •Переваги
- •Недоліки
- •Мови програмування високого рівня
- •П'ять поколінь мов програмування
- •П'яте покоління
- •Філософія
- •Мінімалізм
- •Характеристика
- •Відсутня функціональність
- •Історія Рання розробка
- •Стандарт c99
- •Стандарт c11
- •Використання
- •Бібліотеки
- •Критика
Стандарт c99
Докладніше: С99
Після процесу стандартизації ANSI, специфікація мови C протягом якогось часу залишилася відносно статичною, тоді як C++ продовжувала еволюціонувати, у значній мірі завдяки своїм власним зусиллям зі стандартизації. Нормативна Поправка 1, створила новий стандарт для мови C у 1995, але лише для того, щоб виправити деякі деталі стандарту C89 і додати обширнішу підтримки міжнародних наборів символів. Проте, стандарт піддався подальшому перегляду в кінці 1990-х, привівши до публікації ISO 9899:1999 у 1999 році. Цей стандарт зазвичай іменують, як «C99». Він був прийнятий, як стандарт ANSI у березні 2000.
Стандарт C99 ввів декілька нових особливостей, багато з яких вже були реалізовані у декількох компіляторах:
Вкладені функції
Змінні можуть оголошуватися будь-де (як у C++)
Введено декілька нових типів даних, зокрема, long long int, явний логічний (булевий) тип даних, і комплексний тип для представлення комплексних чисел
Масиви зі змінними довжинами
Підтримка коротких, однорядкових коментарів, що починаються з //, як у BCPL та C++
Нові бібліотечні функції, як наприклад sprintf
Нові заголовні файли, як то stdbool.h та inttypes.h
Вдосконалена підтримка стандарту IEEEдля роботи з плаваючою крапкою
Виправлено друкарські огріхи.
C99 сумісний з C90, однак, має деякі відмінності; зокрема, якщо в декларації ідентифікатора не вистачає специфікатора типу, змінна чи функція надалі не сприймається оголошеною неявно як int. Комітет стандартів вирішив, що важливіше, щоби компілятори діагностували неуважне упущення специфікатора типу, ніж мовчки обробляли код. На практиці, компілятори, ймовірно, діагностують упущення, але й приймають змінну оголошеною як int і продовжують переклад програми.
GCC та інші компілятори C наразі підтримують багато з нових можливостей C99. Проте, вони меншою мірою підтримуються компіляторами таких компаній, як Microsoft і Borland, котрі зосередилися переважно на C++, відтоді, як C++ забезпечує подібну функціональність.
Стандарт c11
Міжнародна організація зі стандартизації (ISO) у грудні 2011 опублікувала оновлений варіант стандарту для мови Сі - ISO/IEC 9899:2011,[8] що був створений під кодовим ім'ям C1X і прийшов на зміну стандарту C99. Оскільки стандарт розвивався досить тривалий час, пройшовши стадії випуску декількох чорнових редакцій, сучасні компілятори, такі як GCC 4.6 і LLVM3.0, уже підтримують більшість описаних у специфікації можливостей.
У новій специфікації збільшена сумісність з мовою С++ і представлені деякі нові можливості, такі як
підтримка багатонитевості,
підтримка Unicode,
вилучена функція gets,
інтерфейс для перевірки допустимих меж і діапазонів значень,
анонімні структури та об'єднання (наприклад, можна вкласти блок union в struct),
додаткова функція для миттєвого виходу з програми quick_exit,
статичні твердження (Static assertions),
задіяння додаткових макросів для перевірки чисел з плаваючою комою.
Фінальний текст стандарту не доступний для вільного завантаження (тільки платна завантаження), але можна завантажити останню чорнову редакцію (PDF, 3.6 Мб, 701 стор), яка майже не відрізняється від затвердженої специфікації.