C99
C99 â ÑовÑеменнÑй Ð´Ð¸Ð°Ð»ÐµÐºÑ ÑзÑка пÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¡Ð¸.
[пÑавиÑÑ] ÐÑÑоÑиÑ
ÐоÑле пÑоÑеÑÑа ÑÑандаÑÑизаÑии ANSI ÑпеÑиÑикаÑÐ¸Ñ ÑзÑка Си некоÑоÑое вÑÐµÐ¼Ñ Ð¾ÑÑавалаÑÑ Ð¾ÑноÑиÑелÑно неизменной, Ñогда как C++ пÑодолжал ÑазвиваÑÑÑÑ, оÑобенно во вÑÐµÐ¼Ñ ÐµÐ³Ð¾ ÑÑандаÑÑизаÑии. ÐоÑмаÑÐ¸Ð²Ð½Ð°Ñ Ð¿Ð¾Ð¿Ñавка 1 Ñоздала новÑй ÑÑандаÑÑ ÑзÑка Си в 1995 годÑ, но ÑолÑко Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ Ð¸ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ Ð´ÐµÑалей ÑÑандаÑÑа C89 и Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑаÑÑиÑенной поддеÑжки инÑеÑнаÑионалÑнÑÑ Ð½Ð°Ð±Ð¾Ñов Ñимволов. Тем не менее, ÑÑандаÑÑ Ð¿Ð¾Ð´Ð²ÐµÑгÑÑ Ð´Ð°Ð»ÑнейÑей Ñевизии в конÑе 1990-Ñ , ÑÑо пÑивело к пÑбликаÑии ÑÑандаÑÑа ISO/IEC 9899:1999 в 1999 годÑ. ÐÑÐ¾Ñ ÑÑандаÑÑ ÑаÑÑо ÑпоминаеÑÑÑ ÐºÐ°Ðº «C99». Ðн бÑл пÑинÑÑ Ð² каÑеÑÑве ÑÑандаÑÑа ANSI в мае 2000 года. ÐеждÑнаÑоднÑй ÑÑандаÑÑ Ð¡Ð¸ поддеÑживаеÑÑÑ ÑабоÑей гÑÑппой ISO/IEC JTC1/SC22/WG14.
[пÑавиÑÑ] ÐовÑе возможноÑÑи
Ð C99 бÑло добавлено неÑколÑко новÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑей, многие из коÑоÑÑÑ Ñже бÑли ÑÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ñ Ð² каÑеÑÑве ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð² некоÑоÑÑÑ ÐºÐ¾Ð¼Ð¿Ð¸Ð»ÑÑоÑÐ°Ñ :
- ÐÑÑÑоеннÑе ÑÑнкÑии
- ÐеÑÑо, в коÑоÑом возможно обÑÑвление пеÑеменнÑÑ , болÑÑе не огÑаниÑено глобалÑной облаÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи и наÑалом ÑоÑÑавного опеÑаÑоÑа (блока)
- ÐеÑколÑко новÑÑ
Ñипов даннÑÑ
, вклÑÑаÑ
long long int, дополниÑелÑнÑе ÑаÑÑиÑеннÑе ÑелÑе ÑипÑ, ÑвнÑе логиÑеÑкий Ñип даннÑÑ , а Ñакже комплекÑнÑй Ñип (complex) Ð´Ð»Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð»ÐµÐºÑнÑÑ ÑиÑел - ÐаÑÑÐ¸Ð²Ñ Ð¿ÐµÑеменной длинÑ
- ÐоддеÑжка одноÑÑÑоÑнÑÑ
комменÑаÑиев, наÑинаÑÑиÑ
ÑÑ Ñ
//, как в BCPL или C++ - ÐовÑе библиоÑеÑнÑе ÑÑнкÑии, как, напÑимеÑ,
snprintf - ÐовÑе заголовоÑнÑе ÑайлÑ, Ñакие как
stdbool.hиinttypes.h - ТиповÑе маÑемаÑиÑеÑкие ÑÑнкÑии (
tgmath.h) - УлÑÑÑена поддеÑжка ÑÑандаÑÑа IEEE 754-2008
- ÐÑоекÑиÑÑемÑе иниÑиализаÑоÑÑ
- СоÑÑавнÑе конÑÑанÑÑ
- ÐоддеÑжка ваÑиаÑивнÑÑ Ð¼Ð°ÐºÑоÑов (макÑоÑов пеÑеменной аÑноÑÑи)
- СмÑгÑение (
restrict) огÑаниÑений Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ агÑеÑÑивной опÑимизаÑии кода
[пÑавиÑÑ] ÐбÑаÑÐ½Ð°Ñ ÑовмеÑÑимоÑÑÑ Ñ C90
C99 ÑвлÑеÑÑÑ Ð±Ð¾Ð»ÑÑей ÑаÑÑÑÑ Ð¾Ð±ÑаÑно ÑовмеÑÑимÑм Ñ C90, но вмеÑÑе Ñ Ñем в некоÑоÑÑÑ
ÑлÑÑаÑÑ
ÑвлÑеÑÑÑ Ð±Ð¾Ð»ÐµÐµ жÑÑÑким. Ð ÑаÑÑноÑÑи, обÑÑвление без ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ñипа болÑÑе не подÑазÑÐ¼ÐµÐ²Ð°ÐµÑ Ð½ÐµÑвное задание Ñипа int. ÐомиÑÐµÑ Ð¿Ð¾ ÑÑандаÑÑизаÑии ÑзÑка Си ÑеÑил, ÑÑо Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»ÑÑоÑов бÑÐ´ÐµÑ Ð±Ð¾Ð»ÐµÐµ важнÑм опÑеделÑÑÑ Ð¿ÑопÑÑк по невнимаÑелÑноÑÑи ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ñипа, Ñем «ÑиÑ
аÑ» обÑабоÑка ÑÑаÑого кода, полагавÑаÑÑÑ Ð½Ð° неÑвное Ñказание int. Ðа пÑакÑике же, компилÑÑоÑÑ Ð¼Ð¾Ð³Ð»Ð¸ опÑеделÑÑÑ Ð½ÐµÑказание, но Ñакже допÑÑкали, ÑÑо ÑÑо int и пÑодолжали компилÑÑÐ¸Ñ Ð¿ÑогÑаммÑ.
[пÑавиÑÑ] ÐоддеÑжка ÑаÑпÑоÑÑÑанÑннÑми компилÑÑоÑами
GCC и дÑÑгие компилÑÑоÑÑ ÑзÑка Си поддеÑживаÑÑ Ð¼Ð½Ð¾Ð³Ð¸Ðµ Ð½Ð¾Ð²Ð¾Ð²Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÑÑандаÑÑа C99. Тем не менее, оÑÑÑаеÑÑÑ Ð½ÐµÐ´Ð¾ÑÑаÑоÑÐ½Ð°Ñ Ð¿Ð¾Ð´Ð´ÐµÑжка ÑÑандаÑÑа Ñо ÑÑоÑÐ¾Ð½Ñ ÐºÑÑпнÑÑ Ð¿ÑоизводиÑелей ÑÑедÑÑв ÑазÑабоÑки, ÑÐ°ÐºÐ¸Ñ ÐºÐ°Ðº Microsoft и Borland, коÑоÑÑе ÑоÑÑедоÑоÑилиÑÑ, в оÑновном, на ÑзÑке C++, Ñак как C++ обеÑпеÑÐ¸Ð²Ð°ÐµÑ ÑÑнкÑионалÑноÑÑÑ, ÑÑ Ð¾Ð¶ÑÑ ÑÑнкÑионалÑноÑÑи, пÑедоÑÑавлÑемой нововведениÑми ÑÑандаÑÑа.
GCC, невзиÑÐ°Ñ Ð½Ð° его ÑаÑиÑеннÑÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÑ C99, вÑе еÑÑ ÑвлÑеÑÑÑ Ð½Ðµ полноÑÑÑÑ ÑовмеÑÑимой ÑеализаÑией: некоÑоÑÑе оÑобенноÑÑи не ÑÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ñ Ð¸Ð»Ð¸ ÑабоÑаÑÑ Ð½ÐµÐºÐ¾ÑÑекÑно.[1]
СоглаÑно Sun Microsystems, Sun Studio (коÑоÑое доÑÑÑпно Ð´Ð»Ñ Ñвободного ÑкаÑиваниÑ) Ñже полноÑÑÑÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑÑандаÑÑ C99.[2]
ÐнÑеÑпÑеÑаÑÐ¾Ñ ÑзÑка Си Ch поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¾ÑновнÑе оÑобенноÑÑи 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, ÑабоÑÐ°Ñ Ð³ÑÑппа по ÑÑандаÑÑизаÑии подгоÑовила ÑÐµÑ Ð½Ð¸ÑеÑкий оÑÑÑÑ, ÑодеÑжаÑий ÑледÑÑÑие ÑлÑÑÑениÑ: ÑлÑÑÑÐµÐ½Ð½Ð°Ñ Ð¿Ð¾Ð´Ð´ÐµÑжка вÑÑÑоенной обÑабоÑки, дополниÑелÑнÑе ÑимволÑнÑе ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ (поддеÑжка Unicode), библиоÑеÑнÑе ÑÑнкÑии Ñ ÑлÑÑÑенной пÑовеÑкой допÑÑÑимÑÑ Ð·Ð½Ð°Ñений. ÐÑодолжаеÑÑÑ ÑабоÑа и над ÑÐµÑ Ð½Ð¸ÑеÑкими оÑÑÑÑами, ÑвÑзаннÑми Ñ Ð´ÐµÑÑÑиÑнÑми ÑиÑлами Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей запÑÑой, дополниÑелÑнÑми маÑемаÑиÑеÑкими ÑпеÑиалÑнÑми ÑÑнкÑиÑми и дополниÑелÑнÑми ÑÑнкÑиÑми Ð´Ð»Ñ ÑабоÑÑ Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑки ÑаÑпÑеделÑемой памÑÑÑÑ. ÐомиÑеÑÑ Ð¿Ð¾ ÑÑандаÑÑизаÑии Си и C++ ÑовмеÑÑно ÑабоÑаÑÑ Ð½Ð°Ð´ ÑпеÑиÑикаÑиÑми Ð´Ð»Ñ Ð¼Ð½Ð¾Ð³Ð¾Ð¿Ð¾ÑоÑного пÑогÑаммиÑованиÑ.
Ð 2007 наÑалаÑÑ ÑабоÑа над загоÑовкой новой Ñевизии ÑÑандаÑÑа ÑзÑка Си, неоÑиÑиалÑно назÑваемой «C1x». ÐомиÑÐµÑ Ð¿Ð¾ ÑÑандаÑÑизаÑии ÑзÑка Си поддеÑжал ÑÑÑаÑегиÑ, коÑоÑÐ°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° огÑаниÑиÑÑ Ð²ÐºÐ»ÑÑение новÑÑ Ð½Ð°ÑабоÑок, не «обкаÑаннÑÑ Â» ÑÑÑеÑÑвÑÑÑими ÑеализаÑиÑми.
СкоÑее вÑего, ÑÑандаÑÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ gets, коÑоÑÐ°Ñ Ð±Ñла оÑиÑиалÑно пÑизнана неÑекомендÑемой к иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð·-за многоÑиÑленнÑÑ
оÑÑÑÑов о пÑоблемаÑ
каÑаÑелÑно небезопаÑно ÑпÑоекÑиÑованного инÑеÑÑейÑа, не бÑÐ´ÐµÑ Ð²ÐºÐ»ÑÑена в ÑледÑÑÑÑÑ ÑÐµÐ²Ð¸Ð·Ð¸Ñ ÑÑандаÑÑа ÑзÑка Си.
[пÑавиÑÑ] См. Ñакже
[пÑавиÑÑ] ÐÑимеÑаниÑ
- â СÑаÑÑÑ Ð¿Ð¾Ð´Ð´ÐµÑжки нововведений ÑÑандаÑÑа C99 в GCC. Free Software Foundation, Inc. (2007-11-22). ÐÑовеÑено 9 ÑнваÑÑ 2008.
- â Sun Studio 12: C Compiler 5.9 Readme. Sun Microsystems, Inc. (2007-05-31). ÐÑовеÑено 9 ÑнваÑÑ 2008.
- â C/C++ interpreter Ch C99 features. SoftIntegration, Inc. (2008-02-15). ÐÑовеÑено 15 ÑевÑÐ°Ð»Ñ 2008.

