C99 — стандарт мови програмування Сі. Визначений в ISO/IEC 9899:1999, сучасна версія — ISO/IEC 9899:1999/Cor 3: 2007 від 2007-11-15. Є розвитком стандарту C90.
Історія
Після процесу стандартизації ANSI специфікація мови Сі деякий час залишалася відносно незмінною, тоді як продовжувала розвиватися, особливо під час її стандартизації. Нормативна поправка 1 створила новий стандарт мови Сі 1995 року, але тільки з точки зору виправлення деяких деталей стандарту C89 і додання розширеної підтримки інтернаціональних наборів символів. Проте, стандарт зазнав подальших змін у кінці 1990-х, що призвело до опублікування 1999 року стандарту ISO/IEC 9899:1999. Цей стандарт часто згадуюєть як «C99». ANSI прийняв його як стандарт у травні 2000 року. Міжнародний стандарт C підтримує робоча група /WG14.
Нові можливості
У C99 додано кілька нових можливостей, багато з яких уже були реалізовані як розширення в деяких компіляторах.
- [en] (оголошені з ключовим словом inline).
- Місце, в якому можливе оголошення змінних, більше не обмежене глобальною областю видимості та початком складеного оператора (блоку).
- Декілька нових типів даних, зокрема
long long int
, додаткові розширені цілі типи, явний логічний тип даних, а також комплексний тип (complex
) для подання комплексних чисел. - [en].
- Підтримка однорядкових коментарів, що починаються з
//
як у BCPL або C++. - Нові бібліотечні функції, наприклад
snprintf
. - Нові заголовні файли, такі як
stdbool.h
таinttypes.h
. - Типові математичні функції (
tgmath.h
). - Покращена підтримка стандарту .
- Складені константи (наприклад, стало можливим визначати структури у виклику функції:
function((struct point){4,2})
). - Нові ініціалізатори для масивів і структур (
int а[10] = { [0] = 100, [3] = 200}; struct mystruct {int a; int b; int c;} ob = { .c = 30, .a = 10 };
). - Підтримка варіативних макросів (макросів змінної арності).
- Пом'якшення (
restrict
) обмежень для агресивнішої оптимізації коду.
Зворотна сумісність із C90
C99 є переважно сумісним зі C90, але в деяких випадках є жорсткішим. Зокрема, оголошення без зазначення типу більше не має на увазі неявного задання типу int
. Комітет зі стандартизації мови Сі вирішив, що для компіляторів буде важливішим визначати пропуск зазначення типу через неуважність, ніж «тихо» опрацьовувати старий код, що покладалася на неявне вказання int
. Насправді ж, компілятори могли визначати невказання, але також припускали, що це int
і продовжували компілювати програму.
Підтримка поширеними компіляторами
GCC та інші компілятори мови Сі підтримують багато нововведень стандарту C99. Проте, відчувається недостатня підтримка стандарту з боку великих виробників засобів розробки, таких як Microsoft і Borland, які зосередилися, переважно, на мові C++, оскільки C++ забезпечує функціональність, схожу до нововведень стандарту.
GCC, попри його розширену підтримку C99, все ще є не повністю сумісною реалізацією: деякі особливості не реалізовано або працюють некоректно.
Згідно з Sun Microsystems, пакунок Sun Studio 9 і вище (доступний для вільного завантаження) сертифікований під стандарт C99, для процесорів UltraSPARC, Intel x86, AMD 64. Також сертифікована IBM XL C/C++ для процесорів Power PC. Існують сертифіковані транслятори інших фірм. Інтерпретатор мови Сі [en] підтримує основні особливості C99 і доступний у версіях для 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
, яку офіційно визнано нерекомендованою до використання через численні звіти про проблеми щодо небезпечно спроєктованого інтерфейсу, не буде включено до наступної ревізії стандарту мови Сі.
Див. також
- Мови програмування
- ANSI C
- C11 — наступна специфікація мови
Примітки
- Статус поддержки нововведений стандарта C99 в GCC. Free Software Foundation, Inc. 22 листопада 2007. Архів оригіналу за 19 березня 2012. Процитовано 9 січня 2008.
- Sun Studio 12: C Compiler 5.9 Readme. Sun Microsystems, Inc. 31 травня 2007. Архів оригіналу за 19 березня 2012. Процитовано 9 січня 2008.
- C/C++ interpreter Ch C99 features. SoftIntegration, Inc. 15 лютого 2008. Архів оригіналу за 19 березня 2012. Процитовано 15 лютого 2008.
Посилання
- Чернетка стандарту C99 з поправками TC1, TC2 і TC3PDF (3.61 MB)
- IBM developerWorks: опенсорсна розробка з урахуванням C99 [ 29 січня 2009 у Wayback Machine.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
C99 standart movi programuvannya Si Viznachenij v ISO IEC 9899 1999 suchasna versiya ISO IEC 9899 1999 Cor 3 2007 vid 2007 11 15 Ye rozvitkom standartu C90 IstoriyaPislya procesu standartizaciyi ANSI specifikaciya movi Si deyakij chas zalishalasya vidnosno nezminnoyu todi yak C prodovzhuvala rozvivatisya osoblivo pid chas yiyi standartizaciyi Normativna popravka 1 stvorila novij standart movi Si 1995 roku ale tilki z tochki zoru vipravlennya deyakih detalej standartu C89 i dodannya rozshirenoyi pidtrimki internacionalnih naboriv simvoliv Prote standart zaznav podalshih zmin u kinci 1990 h sho prizvelo do opublikuvannya 1999 roku standartu ISO IEC 9899 1999 Cej standart chasto zgaduyuyet yak C99 ANSI prijnyav jogo yak standart u travni 2000 roku Mizhnarodnij standart C pidtrimuye robocha grupa WG14 Novi mozhlivostiU C99 dodano kilka novih mozhlivostej bagato z yakih uzhe buli realizovani yak rozshirennya v deyakih kompilyatorah en ogolosheni z klyuchovim slovom inline Misce v yakomu mozhlive ogoloshennya zminnih bilshe ne obmezhene globalnoyu oblastyu vidimosti ta pochatkom skladenogo operatora bloku Dekilka novih tipiv danih zokrema long long int dodatkovi rozshireni cili tipi yavnij logichnij tip danih a takozh kompleksnij tip complex dlya podannya kompleksnih chisel en Pidtrimka odnoryadkovih komentariv sho pochinayutsya z yak u BCPL abo C Novi bibliotechni funkciyi napriklad snprintf Novi zagolovni fajli taki yak a href wiki Stdbool h title Stdbool h stdbool h a ta a href wiki Inttypes h title Inttypes h inttypes h a Tipovi matematichni funkciyi tgmath h Pokrashena pidtrimka standartu Skladeni konstanti napriklad stalo mozhlivim viznachati strukturi u vikliku funkciyi function struct point 4 2 Novi inicializatori dlya masiviv i struktur int a 10 0 100 3 200 struct mystruct int a int b int c ob c 30 a 10 Pidtrimka variativnih makrosiv makrosiv zminnoyi arnosti Pom yakshennya a href wiki Restrict title Restrict restrict a obmezhen dlya agresivnishoyi optimizaciyi kodu Zvorotna sumisnist iz C90C99 ye perevazhno sumisnim zi C90 ale v deyakih vipadkah ye zhorstkishim Zokrema ogoloshennya bez zaznachennya tipu bilshe ne maye na uvazi neyavnogo zadannya tipu int Komitet zi standartizaciyi movi Si virishiv sho dlya kompilyatoriv bude vazhlivishim viznachati propusk zaznachennya tipu cherez neuvazhnist nizh tiho opracovuvati starij kod sho pokladalasya na neyavne vkazannya int Naspravdi zh kompilyatori mogli viznachati nevkazannya ale takozh pripuskali sho ce int i prodovzhuvali kompilyuvati programu Pidtrimka poshirenimi kompilyatoramiGCC ta inshi kompilyatori movi Si pidtrimuyut bagato novovveden standartu C99 Prote vidchuvayetsya nedostatnya pidtrimka standartu z boku velikih virobnikiv zasobiv rozrobki takih yak Microsoft i Borland yaki zoseredilisya perevazhno na movi C oskilki C zabezpechuye funkcionalnist shozhu do novovveden standartu GCC popri jogo rozshirenu pidtrimku C99 vse she ye ne povnistyu sumisnoyu realizaciyeyu deyaki osoblivosti ne realizovano abo pracyuyut nekorektno Zgidno z Sun Microsystems pakunok Sun Studio 9 i vishe dostupnij dlya vilnogo zavantazhennya sertifikovanij pid standart C99 dlya procesoriv UltraSPARC Intel x86 AMD 64 Takozh sertifikovana IBM XL C C dlya procesoriv Power PC Isnuyut sertifikovani translyatori inshih firm Interpretator movi Si en pidtrimuye osnovni osoblivosti C99 i dostupnij u versiyah dlya Windows Linux Mac OS X Solaris QNX i FreeBSD Viznachennya versiyiStandartnij makros STDC VERSION viznachenij zi znachennyam 199901L vkazuye sho pidtrimka C99 dostupna Yak i makros STDC dlya C90 makros STDC VERSION mozhna vikoristati dlya napisannya kodu yakij kompilyuvatimetsya kompilyatorami C90 i C99 po riznomu Nizhche navedeno priklad u yakomu za dopomogoyu makrosa STDC VERSION pereviryayetsya chi ye inline klyuchovim slovom if STDC VERSION gt 199901L inline is a keyword else define inline nothing endifNapryami rozvitku standartuPislya ratifikaciyi standartu C99 robocha grupa zi standartizaciyi pidgotuvala tehnichnij zvit sho mistit taki pokrashennya pokrashena pidtrimka vbudovanoyi obrobki dodatkovi simvolni tipi danih pidtrimka Yunikodu bibliotechni funkciyi z pokrashenoyu Prodovzhuyetsya robota i nad tehnichnimi zvitami pov yazanimi z desyatkovimi chislami z ruhomoyu komoyu dodatkovimi matematichnimi specialnimi funkciyami ta dodatkovimi funkciyami dlya roboti z dinamichno rozpodilyuvanoyu pam yattyu Komiteti zi standartizaciyi Si ta C spilno pracyuyut nad specifikaciyami dlya bagatonitkovogo programuvannya 2007 roku rozpochalasya robota nad zagotovkoyu novoyi reviziyi standartu movi Si neoficijno zvanoyi C1x Komitet zi standartizaciyi movi Si pidtrimav strategiyu yaka maye obmezhiti vklyuchennya novih napracyuvan ne obkatanih nayavnimi realizaciyami Najpevnishe standartnu funkciyu a href wiki Gets title Gets gets a yaku oficijno viznano nerekomendovanoyu do vikoristannya cherez chislenni zviti pro problemi shodo nebezpechno sproyektovanogo interfejsu ne bude vklyucheno do nastupnoyi reviziyi standartu movi Si Div takozhMovi programuvannya ANSI C C11 nastupna specifikaciya moviPrimitkiStatus podderzhki novovvedenij standarta C99 v GCC Free Software Foundation Inc 22 listopada 2007 Arhiv originalu za 19 bereznya 2012 Procitovano 9 sichnya 2008 Sun Studio 12 C Compiler 5 9 Readme Sun Microsystems Inc 31 travnya 2007 Arhiv originalu za 19 bereznya 2012 Procitovano 9 sichnya 2008 C C interpreter Ch C99 features SoftIntegration Inc 15 lyutogo 2008 Arhiv originalu za 19 bereznya 2012 Procitovano 15 lyutogo 2008 PosilannyaChernetka standartu C99 z popravkami TC1 TC2 i TC3 PDF 3 61 MB IBM developerWorks opensorsna rozrobka z urahuvannyam C99 29 sichnya 2009 u Wayback Machine