C99

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

C99 — стандарт мови програмування Сі. Визначений в ISO/IEC 9899:1999, сучасна версія — ISO/IEC 9899:1999/Cor 3: 2007 від 2007-11-15. Є розвитком стандарту C90.

Історія[ред. | ред. код]

Після процесу стандартизації ANSI специфікація мови Сі деякий час залишалася відносно незмінною, тоді як C++ продовжувала розвиватися, особливо під час її стандартизації. Нормативна поправка 1 створила новий стандарт мови Сі 1995 року, але тільки з точки зору виправлення деяких деталей стандарту C89 і додання розширеної підтримки інтернаціональних наборів символів. Проте, стандарт зазнав подальших змін у кінці 1990-х, що призвело до опублікування 1999 року стандарту ISO/IEC 9899:1999. Цей стандарт часто згадуюєть як «C99». ANSI прийняв його як стандарт у травні 2000 року. Міжнародний стандарт C підтримує робоча група ISO/IEC JTC1/SC22/WG14.

Нові можливості[ред. | ред. код]

У C99 додано кілька нових можливостей, багато з яких уже були реалізовані як розширення в деяких компіляторах.

Зворотна сумісність із C90[ред. | ред. код]

C99 є переважно сумісним зі C90, але в деяких випадках є жорсткішим. Зокрема, оголошення без зазначення типу більше не має на увазі неявного задання типу int. Комітет зі стандартизації мови Сі вирішив, що для компіляторів буде важливішим визначати пропуск зазначення типу через неуважність, ніж «тихо» опрацьовувати старий код, що покладалася на неявне вказання int. Насправді ж, компілятори могли визначати невказання, але також припускали, що це int і продовжували компілювати програму.

Підтримка поширеними компіляторами[ред. | ред. код]

GCC та інші компілятори мови Сі підтримують багато нововведень стандарту C99. Проте, відчувається недостатня підтримка стандарту з боку великих виробників засобів розробки, таких як Microsoft і Borland, які зосередилися, переважно, на мові C++, оскільки C++ забезпечує функціональність, схожу до нововведень стандарту.

GCC, попри його розширену підтримку C99, все ще є не повністю сумісною реалізацією: деякі особливості не реалізовано або працюють некоректно[1].

Згідно з Sun Microsystems, пакунок Sun Studio 9 і вище (доступний для вільного завантаження) сертифікований під стандарт C99, для процесорів UltraSPARC, Intel x86, AMD 64[2]. Також сертифікована IBM XL C/C++ для процесорів Power PC. Існують сертифіковані транслятори інших фірм. Інтерпретатор мови Сі Ch[en] підтримує основні особливості C99[3] і доступний у версіях для Windows, Linux, Mac OS X, Solaris, QNX і FreeBSD.

Визначення версії[ред. | ред. код]

Стандартний макрос __STDC_VERSION__, визначений зі значенням 199901L, вказує, що підтримка C99 доступна. Як і макрос __STDC__ для C90, макрос __STDC_VERSION__ можна використати для написання коду, який компілюватиметься компіляторами C90 і C99 по-різному. Нижче наведено приклад, у якому за допомогою макроса __STDC_VERSION__ перевіряється, чи є inline ключовим словом.

#if __STDC_VERSION__ >= 199901L
 /* "inline" is a keyword */
#else
#define inline /* nothing */
#endif

Напрями розвитку стандарту[ред. | ред. код]

Після ратифікації стандарту C99 робоча група зі стандартизації підготувала технічний звіт, що містить такі покращення: покращена підтримка вбудованої обробки, додаткові символьні типи даних (підтримка Юнікоду), бібліотечні функції з покращеною перевіркою допустимих значень. Продовжується робота і над технічними звітами, пов'язаними з десятковими числами з рухомою комою, додатковими математичними спеціальними функціями та додатковими функціями для роботи з динамічно розподілюваною пам'яттю. Комітети зі стандартизації Сі та C++ спільно працюють над специфікаціями для багатониткового програмування.

2007 року розпочалася робота над заготовкою нової ревізії стандарту мови Сі, неофіційно званої «C1x». Комітет зі стандартизації мови Сі підтримав стратегію, яка має обмежити включення нових напрацювань, не обкатаних наявними реалізаціями.

Найпевніше, стандартну функцію gets, яку офіційно визнано нерекомендованою до використання через численні звіти про проблеми щодо небезпечно спроєктованого інтерфейсу, не буде включено до наступної ревізії стандарту мови Сі.

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. Статус поддержки нововведений стандарта C99 в GCC. Free Software Foundation, Inc. 22 листопада 2007. Архів оригіналу за 19 березня 2012. Процитовано 9 січня 2008.
  2. Sun Studio 12: C Compiler 5.9 Readme. Sun Microsystems, Inc. 31 травня 2007. Архів оригіналу за 19 березня 2012. Процитовано 9 січня 2008.
  3. C/C++ interpreter Ch C99 features. SoftIntegration, Inc. 15 лютого 2008. Архів оригіналу за 19 березня 2012. Процитовано 15 лютого 2008.

Посилання[ред. | ред. код]