C11 (C standart versiyasi) - C11 (C standard revision)

C11 (avval C1X) uchun norasmiy ism ISO / IEC 9899: 2011,[1] o'tmish standart uchun C dasturlash tili. U o'rnini egalladi C99 (ISO / IEC 9899: 1999 standarti) va o'rniga qo'yilgan C17 (standart ISO / IEC 9899: 2018). C11 asosan odatiy zamonaviy kompilyatorlar tomonidan qo'llab-quvvatlanadigan funktsiyalarni standartlashtiradi va ko'plarni yaxshiroq qo'llab-quvvatlash uchun batafsil xotira modelini o'z ichiga oladi iplar ijro. Muvofiq C99 dasturlarining kechiktirilganligi sababli, C11 asosiy til standartiga rioya qilishni osonlashtirish uchun ba'zi xususiyatlarni ixtiyoriy qiladi.[2][3]

Oxirgi qoralama, N1570,[4] 2011 yil aprel oyida nashr etilgan. Yangi standart 2011 yil 10 oktyabrda yakuniy loyihasini qayta ko'rib chiqishdan o'tdi va ISO tomonidan rasman ratifikatsiya qilindi va 2011 yil 8 dekabrda ISO / IEC 9899: 2011 nomi bilan nashr etildi, ishtirok etuvchi milliy organlarning qarorini talab qilmasdan.

Standart so'l __STDC_VERSION__ qiymati bilan belgilanadi 201112L C11 yordami mavjudligini ko'rsatish uchun.[5] C11 ning ba'zi xususiyatlari GCC 4.6 versiyasidan boshlab,[6] Jiringlash 3.1 versiyasidan boshlab,[7] IBM XL C 12.1 versiyasidan boshlab.[8]va Microsoft Visual C ++ 2019 yil VS dan boshlab (16,8)[9]

C99-dan o'zgarishlar

Ushbu standart C99 tili va kutubxona xususiyatlariga bir nechta o'zgartirishlarni o'z ichiga oladi, masalan:[10]

  • Hizalama spetsifikatsiya (_Alignalar aniqlovchi, _Alignof operator, aligned_alloc funktsiyasi, <stdalign.h> sarlavha fayli)
  • The _Noreturn funktsiya spetsifikatori va <stdnoreturn.h> sarlavha fayli
  • Yordamida umumiy tipdagi iboralar _Umumiy kalit so'z. Masalan, quyidagi so'l cbrt (x) ga tarjima qilinadi cbrtl (x), cbrt (x) yoki cbrtf (x) turiga qarab x:
#define cbrt (x) _Generic ((x), long double: cbrtl,                               sukut bo'yicha: cbrt,                               suzuvchi: cbrtf) (x)
  • Ko'p tishli qo'llab-quvvatlash (_Tread_local saqlash sinfidagi aniqlovchi, <threads.h> mavzu yaratish / boshqarish funktsiyalari, shu jumladan sarlavha, muteks, shart o'zgaruvchisi va ipga xos saqlash funktsionallik, shuningdek <stdatomic.h>[11] C11 xotira modelini qo'llab-quvvatlovchi atom operatsiyalari uchun).
  • Yaxshilangan Unicode C Unicode texnik hisobotiga asoslangan qo'llab-quvvatlash ISO / IEC TR 19769: 2004 (nilufar va char32_t saqlash uchun turlari UTF-16 /UTF-32 kodlangan ma'lumotlar, jumladan konversiya funktsiyalari <uchar.h> va tegishli siz va U string literal prefikslar, shuningdek u8 for prefiksi UTF-8 kodlangan adabiyotlar).[12]
  • Olib tashlash oladi funktsiyasi (xavfsizroq foydasiga fgets), bu avvalgi C tilini qayta ko'rib chiqishda bekor qilingan, ISO / IEC 9899: 1999 / Cor.3: 2007 (E).
  • Chegaralarni tekshirish interfeyslar (K ilova).[13]
  • Tahlil qilinadigan xususiyatlar (L-ilova).
  • Suzuvchi nuqta turlarining xususiyatlarini so'rash uchun ko'proq makrolar subnormal suzuvchi nuqta raqamlari va turni saqlashga qodir bo'lgan o'nli raqamlar soni.
  • Anonim tuzilmalar va kasaba uyushmalari, kasaba uyushmalari va tuzilmalar joylashganda foydalidir, masalan. yilda tuzilmaviy T { int yorliq; birlashma { suzmoq x; int n; }; };.
  • Statik tasdiqlar, tarjima paytida undan keyingi bosqichda baholanadi #if va #xato, turlar tarjimon tomonidan tushunilganda.
  • Eksklyuziv yaratish va ochish rejimi ("... x" qo'shimchasi) uchun ochmoq. Bu shunday harakat qiladi O_CREAT | O_EXCL yilda POSIX uchun odatda ishlatiladi fayllarni qulflash.
  • The tezkor chiqish dasturni tugatishning uchinchi usuli sifatida ishlaydi, agar u tugatilsa, kamida minimal deinitsializatsiyani amalga oshirishga mo'ljallangan Chiqish muvaffaqiyatsiz.[14]
  • Yangi timespec_get funktsiyasi va unga mos keladigan tuzilish <time.h> darajasi bilan POSIX moslik.
  • Qurilish uchun makrolar murakkab qadriyatlar (qisman, chunki haqiqiy + xayoliy * I agar kutilgan qiymatni keltirmasa xayoliy cheksiz yoki NaN ).[15]

Ixtiyoriy xususiyatlar

Yangi tahrir dasturlarning ayrim qismlarini qo'llab-quvvatlamaslikka imkon beradi, shu jumladan 1999 yilgi tahrirda qo'llab-quvvatlash majburiy bo'lgan ba'zi dasturlarni.[16] Dasturlar ma'lum bir xususiyatni qo'llab-quvvatlaydimi yoki yo'qligini aniqlash uchun dasturlar oldindan belgilangan makroslardan foydalanishi mumkin.

Ixtiyoriy xususiyatlar C11
XususiyatXususiyatlarni sinab ko'rish uchun so'lC99-da foydalanish[17]
Tahlil qilish imkoniyati (L ilova)__STDC_ANALYZABLE__Mavjud emas
Chegaralarni tekshiruvchi interfeyslar (K ilova)__STDC_LIB_EXT1__Mavjud emas
Ko'p ishlov berish (<threads.h>)__STDC_NO_THREADS__Mavjud emas
Atom ibtidoiy va turlari (<stdatomic.h> va _Atomik turi saralash)[18]__STDC_NO_ATOMICS__Mavjud emas
IEC 60559 suzuvchi nuqta arifmetikasi (ilova F)__STDC_IEC_559__Ixtiyoriy
IEC 60559 mos keladigan murakkab arifmetik (ilova G)__STDC_IEC_559_COMPLEX__Ixtiyoriy
Murakkab turlari (<complex.h>)__STDC_NO_COMPLEX__Mezbon dasturlar uchun majburiydir
O'zgaruvchan uzunlik massivlari[19]__STDC_NO_VLA__Majburiy

Tanqid

Ixtiyoriy chegaralarni tekshiruvchi interfeyslar (K-ilova) munozarali bo'lib qolmoqda va keng qo'llanilmagan va ularni bekor qilish yoki keyingi standart tahrirdan olib tashlash taklif qilingan.[20] Ushbu interfeysning asosiy tarafdori bo'lgan Microsoft ham ta'rifga mos kelmaydi.[21] Bunga qo'shimcha ravishda, K ilovasida, masalan, ko'proq foydali TR24731-2 (dinamik ajratish funktsiyalari) mavjud emas vasprintf va open_memstream.[22] Bir nechta ochiq manbali dasturlarga quyidagilar kiradi Watcom-ni oching C / C ++ ning "Xavfsiz C" kutubxonasi[23] va safeclib.[24]

Shuningdek qarang

Adabiyotlar

  1. ^ "ISO / IEC 9899: 2011 - Axborot texnologiyalari - Dasturlash tillari - C". www.iso.org.
  2. ^ "WG14 N1250 C1X Nizomi" (PDF).
  3. ^ "S standartini o'rnatish". www.open-std.org.
  4. ^ WG14 N1570 qo'mitasi loyihasi - 2011 yil 12 aprel
  5. ^ "411-sonli kamchiliklar to'g'risida hisobot". ISO / IEC JTC1 / SC22 / WG14 - C. 2012 yil fevral. Olingan 2012-05-04.
  6. ^ "GCC 4.6 chiqarilish seriyasi - o'zgarishlar, yangi xususiyatlar va tuzatishlar - GNU loyihasi - bepul dasturiy ta'minot fondi (FSF)". gcc.gnu.org.
  7. ^ "Clang 3.1 chiqarilish eslatmalari". llvm.org.
  8. ^ "IBM XL C / C ++ kompilyatorlariga qo'shilgan ISO C11-ni qo'llab-quvvatlash". www.ibm.com. 2014 yil 17 aprel.
  9. ^ "MSVC-ga etib kelgan C11 va C17 standart qo'llab-quvvatlashi". devblogs.microsoft.com. 14 sentyabr 2020 yil.
  10. ^ WG14 N1516 qo'mitasi loyihasi - 2010 yil 4 oktyabr
  11. ^ "Atom operatsiyalari kutubxonasi - cppreference.com". en.cppreference.com.
  12. ^ "WG14 N1286 -" TR-19769 va yangi belgilar turlarini qo'llab-quvvatlash to'g'risida ", Nik Stoutton, Larri Dvayer" (PDF).
  13. ^ Berin Babkok-Makkonnell. "API02-C. Qatorga o'qigan yoki yozgan funktsiyalar manba yoki maqsad hajmini aniqlash uchun argument olishlari kerak".
  14. ^ "Jarayondan voz kechish". www.open-std.org.
  15. ^ "Kompleks qiymat yaratish". www.open-std.org.
  16. ^ WG14 N1548 qo'mitasi loyihasi - 2010 yil 2-dekabr 6.10.8.3 Shartli xususiyat makroslari
  17. ^ ISO 9899: 1999 6.10.8 Oldindan belgilangan so'l nomlari
  18. ^ "WG14 N1558 14-18 mart kunlari yig'ilish bayonnomalari (qoralama)" (PDF).
  19. ^ ISO 9899: 2011 dasturlash tillari - C 6.7.6.2 4
  20. ^ "N1969 - K ilovasi bilan yangilangan dala tajribasi - interfeyslarni tekshirish chegaralari". www.open-std.org.
  21. ^ Leffler, Jonatan. "c - Siz TR 24731" xavfsiz "funktsiyalaridan foydalanasizmi?". Stack overflow.
  22. ^ "c - Siz TR 24731" xavfsiz "funktsiyalaridan foydalanasizmi?". Stack overflow.
  23. ^ "Safer C Library - Open Watcom". 2015 yil 3-may.
  24. ^ "safec: Xavfsiz C kutubxonasi - README". rurban.github.io.

Tashqi havolalar

Oldingi
C99
C tili standartlarMuvaffaqiyatli
C17