C11

A C11 vagy ISO/IEC 9899:2011 (informálisan C1X ) a C nyelv szabványa (ISO/IEC 9899:2011 [1] ), amely a meglévő C99 szabványt váltotta fel . A szabvány megjelenését hivatalosan 2011. december 19-én jelentették be [2] . A szabvány ezen verziója nagyrészt szabványosítja a modern fordítóprogramokban található funkciókat. A jelenlegi C99 implementációknak a C11 szabvánnyal való gyenge kompatibilitása miatt szelektívebb funkciókat is beépítettek az alapnyelvi szabvánnyal való kompatibilitás egyszerűsítésére [3] [4] . A 2018 óta érvényben lévő C18 (alias C17) szabvány tulajdonképpen a C11 finomított változata, kijavítva a szabványban talált hibákat [5] .

A legújabb (ingyenesen letölthető) specifikációtervezet az N1570 nevet viseli, és 2011 áprilisában tették közzé [6] .

Az új szabvány 2011. október 10-én átesett a végleges felülvizsgálaton, az ISO hivatalosan is ratifikálta, és 2011. december 8-án az ISO/IEC 9899:2011 szabványban minden megjegyzés nélkül megjelent.

A szabványos __STDC_VERSION__ makró 201112L értékű meghatározása azt jelzi, hogy a C11 támogatja [7] . Néhány C11 szolgáltatást a GCC a 4.6-os verzió óta támogat [8] . A Clang támogatása a 3.1-es verziótól kezdődik [9] , az IBM XL C esetében pedig a 12.1-es verziótól [10] .


Változások C99 óta

A legutóbbi, 2011. április 12-i tervezet a következő változtatásokat tartalmazza a C99 nyelvi és könyvtári specifikációjában: [6] [11]

#define cbrt(X) _Generic((X), long double: cbrtl, \ default: cbrt, \ float: cbrtf)(X)
  • Többszálú támogatás , ehhez egy típusspecifikátor került a szabványba _Thread_local, egy fejlécfájl <threads.h>, amely tartalmazza a szálak létrehozására és kezelésére szolgáló funkciókat, mutexet , monitorokat , valamint a szálak tárolására szolgáló funkciókat ( en : Thread-local storage ). A C11 egy típusminősítőt _Atomicés egy fejlécfájlt is hozzáadott <stdatomic.h>az atomi memóriaelérési műveletekhez ;
  • Továbbfejlesztett Unicode -támogatás a C Unicode Technical Report ISO/IEC TR 19769:2004 alapján (típusok char16_tés char32_tadatok tárolására UTF-16 / UTF-32 kódolásban , a fejlécfájlban található konverziós függvények <uchar.h>és a megfelelő előtagok ués Ukarakterlánc-literálok előtt, valamint a előtag u8az UTF-8 kódolású karakterláncokhoz );
  • Az getselavult funkciót eltávolították a C szabvány jelenlegi változatából (ISO/IEC 9899:1999/Cor.3:2007(E));
  • Interfészek a tömbhatárok ellenőrzéséhez ( en :  Bounds checking , K melléklet). [12]  ;
  • Az elemezhetőség jellemzői (L. melléklet  );
  • További makrók hozzáadva, hogy megkapják a lebegőpontos számok jellemzőit a denormalizált számok és a pontosságvesztés nélkül tárolható decimális számjegyek maximális számával kapcsolatban;
  • Névtelen struktúrák és uniók , amelyek struktúrák és szakszervezetek egymásba ágyazására szolgálnak, mint pl struct T { int tag; union { float x; int n; }; };.
  • Statikus állítások ( eng.  assertion ), amelyek jobbak, mint a preprocesszor parancsai #ifés #error, mivel az állítást a fordítás egy későbbi szakaszában értékeli ki, amikor a fordító "tudja" milyen típust;
  • Az  exkluzív létrehozás és megnyitás mód az fopen funkcióhoz . Ez a mód hasonló a POSIX módokhoz , és általában fájlok zárolására szolgál ;"…x" O_CREAT|O_EXCL
  • A függvény quick_exit a harmadik funkció, amely leállítja a programot, minimális deinicializálással, ha a függvény exitnem tudja leállítani a programot [13] ;
  • Makrók komplex számok generálására (ezt azért adták hozzá, mert előfordulhat, hogy a kód real + imaginary*Inem állítja elő a várt értéket, ha a képzeletbeli rész végtelen vagy "nem szám" ( NaN ) [14] ).

Szelektív lehetőségek

A szabvány új változata lehetővé teszi, hogy az implementációk ne támogassák a szabvány egyes részeit, beleértve azokat is, amelyeket korábban támogatni kellett (a C99-ben) [15] . A programok előre meghatározott makrókat használhatnak annak meghatározására, hogy egy megvalósítás támogatja-e a szabvány egy részét vagy sem.

Szelektív funkciók a C1X-ben
Lehetőség Makró Elérhetőség C99-ben [16]
Elemzés (L. melléklet) __STDC_ANALYZABLE__ Nem elérhető
Műveletek törtszámokkal az IEC 60559 szerint (F melléklet) __STDC_IEC_559__ szelektíven
Az IEC 60559 (G melléklet) szabványnak megfelelő összetett szám-aritmetika __STDC_IEC_559_COMPLEX__ szelektíven
Tömbhatár-ellenőrző interfészek (K. melléklet) __STDC_LIB_EXT1__ Nem elérhető
Komplex számtípusok ( <complex.h>) __STDC_NO_COMPLEX__ Szükségszerűen
Többszálú programozás ( <threads.h>) __STDC_NO_THREADS__ Nem elérhető
Atomműveletek ( <stdatomic.h>és típusminősítő _Atomic) [17] __STDC_NO_ATOMICS__ Nem elérhető
Változó hosszúságú tömbök __STDC_NO_VLA__ Szükségszerűen

Lásd még

Jegyzetek

  1. ISO/IEC 9899:2011 - Információtechnológia - Programozási nyelvek - C . Kezelés időpontja: 2011. december 22. Az eredetiből archiválva : 2011. december 27.
  2. Az ISO/IEC JTC1/SC22/WG14 a C programozási nyelv nemzetközi szabványosítási munkacsoportja . Letöltve: 2011. szeptember 22. Az eredetiből archiválva : 2018. február 12.
  3. WG14 N1250 A C1X Charta . Letöltve: 2011. szeptember 22. Az eredetiből archiválva : 2015. szeptember 24..
  4. WG14 N1460 A C szabvány részbeállítása . Letöltve: 2011. szeptember 22. Az eredetiből archiválva : 2022. március 31.
  5. Brad Kelecava. A jelenlegi C programozási nyelv szabvány – ISO/IEC 9899:2018 (C18) . ANSI (2018. november 13.). Letöltve: 2019. június 11. Az eredetiből archiválva : 2022. április 11.
  6. 1 2 WG14 N1570 bizottsági tervezet - 2011. április 12 . Letöltve: 2011. szeptember 22. Az eredetiből archiválva : 2021. december 25.
  7. Hibajelentés #411 . www.open-std.org. Letöltve 2016. január 28. Az eredetiből archiválva : 2019. január 18..
  8. GCC 4.6 Release Series – Változások, új szolgáltatások és javítások – GNU Project – Free Software Foundation (FSF) . gcc.gnu.org. Letöltve: 2016. január 28. Az eredetiből archiválva : 2015. november 4..
  9. Clang 3.1 Kiadási megjegyzések . llvm.org. Letöltve: 2016. január 28. Az eredetiből archiválva : 2016. március 4..
  10. ISO C11 támogatása hozzáadva az IBM XL C/C++  fordítókhoz . www.ibm.com (2014. április 17.). Letöltve: 2016. január 28. Az eredetiből archiválva : 2021. március 8..
  11. WG14 N1516 bizottsági tervezet - 2010. október 4 . Letöltve: 2011. szeptember 22. Az eredetiből archiválva : 2012. március 10..
  12. Berin Babcock-McConnell API02-C. Azoknak a függvényeknek, amelyek egy tömbbe olvasnak vagy írnak, argumentumot kell használniuk a forrás vagy a cél méretének megadásához (holt hivatkozás) . Az eredetiből archiválva : 2011. szeptember 29. 
  13. WG14 N1327 Folyamat felhagyása . Letöltve: 2011. szeptember 22. Az eredetiből archiválva : 2022. január 20.
  14. WG14 N1464 Komplex érték létrehozása . Letöltve: 2011. szeptember 22. Az eredetiből archiválva : 2012. március 10..
  15. WG14 N1548 bizottsági tervezet – 2010. december 2. Archiválva : 2017. december 22., a Wayback Machine 6.10.8.3 Feltételes szolgáltatásmakrók
  16. ISO 9899:1999 6.10.8 Előre meghatározott makrónevek
  17. WG14 N1558 március 14-18 ülés jegyzőkönyve (tervezet) . Letöltve: 2011. szeptember 22. Az eredetiből archiválva : 2022. január 20.

Linkek