C11

C11 eller ISO/IEC 9899:2011 (uformelt C1X ) er en standard for C -sproget (ISO/IEC 9899:2011 [1] ), der erstattede den eksisterende C99-standard . Udgivelsen af ​​standarden blev officielt annonceret den 19. december 2011 [2] . Denne version af standarden standardiserer stort set funktioner, der findes i almindelige moderne compilere. På grund af den dårlige kompatibilitet af nuværende C99-implementeringer med C11-standarden, er mere selektive funktioner inkluderet for at forenkle kompatibiliteten med kernesprogstandarden [3] [4] . C18 standard gyldig siden 2018 (aka C17) er faktisk en raffineret version af C11, der korrigerer de fejl, der findes i standarden [5] .

Det seneste udkast til specifikation (tilgængelig til gratis download) hedder N1570 og blev offentliggjort i april 2011 [6] .

Den nye standard gennemgik et endeligt udkast til revision den 10. oktober 2011 og blev formelt ratificeret af ISO og offentliggjort i ISO/IEC 9899:2011 den 8. december 2011 uden kommentarer.

Definitionen af ​​standardmakroen __STDC_VERSION__ med værdien 201112L indikerer, at der er understøttelse af C11 [7] . Nogle C11-funktioner er blevet understøttet af GCC siden version 4.6 [8] . Support til Clang starter ved version 3.1 [9] , og for IBM XL C starter support fra version 12.1 [10] .


Ændringer siden C99

Det seneste udkast dateret 12. april 2011 indeholder følgende ændringer til C99-sproget og biblioteksspecifikationen: [6] [11]

#define cbrt(X) _Generisk((X), lang dobbelt: cbrtl, \ default: cbrt, \ float: cbrtf)(X)
  • Multithreading - understøttelse , til dette blev der tilføjet en typespecifikation til standarden _Thread_local, en header-fil <threads.h>, der inkluderer funktioner til oprettelse og styring af tråde, mutexes , skærme og funktioner til styring af trådlagring ( da : Thread-local storage ). Også C11 tilføjede en type qualifier _Atomicog en header fil <stdatomic.h>til atomic memory access operationer ;
  • Forbedret Unicode -understøttelse baseret på C Unicode Technical Report ISO/IEC TR 19769:2004 (typer char16_tog char32_ttil lagring af data i UTF-16 / UTF-32-kodninger , konverteringsfunktioner fundet i header-fil <uchar.h>og passende præfikser uog Ufør streng-literaler, samt præfiks u8for UTF-8- kodede strenge );
  • Den getsforældede funktion er blevet fjernet fra den aktuelle revision af C-standarden (ISO/IEC 9899:1999/Cor.3:2007(E));
  • Grænseflader til kontrol af matrixgrænser ( da :  Kontrol af grænser , bilag K). [12]  ;
  • Analyserbarhed ( bilag  L);
  • Tilføjet flere makroer for at få karakteristika for flydende decimaltal vedrørende denormaliserede tal og det maksimale antal decimalcifre, der kan gemmes uden tab af præcision;
  • Anonyme strukturer og fagforeninger , bruges til at indlejre strukturer og fagforeninger, som f.eks struct T { int tag; union { float x; int n; }; };.
  • Statiske påstande ( eng.  assertion ), som er bedre end præprocessorkommandoerne #ifog #error, fordi påstanden evalueres på et senere oversættelsestrin, når compileren "ved" hvilken type;
  • Den  eksklusive opret-og-åbn-tilstand til fopen - "…x"funktionen . Denne tilstand ligner POSIX -tilstandene og bruges typisk til at låse filer ; O_CREAT|O_EXCL
  • Funktionen quick_exit er den tredje funktion til at afslutte programmet, med minimal deinitialisering af værdier, hvis funktionen exitikke kan afslutte programmet [13] ;
  • Makroer til generering af komplekse tal (blev tilføjet, fordi koden real + imaginary*Imuligvis ikke producerer den forventede værdi, hvis den imaginære del var uendelig eller "ikke et tal" ( NaN ) [14] ).

Selektive muligheder

Den nye revision af standarden gør det muligt for implementeringer ikke at understøtte visse dele af standarden, inklusive dem, der tidligere skulle understøttes (i C99) [15] . Programmer kan bruge foruddefinerede makroer til at bestemme, om en implementering understøtter en del af en standard eller ej.

Selektive funktioner i C1X
Mulighed Makro Tilgængelighed i C99 [16]
Analyse (bilag L) __STDC_ANALYZABLE__ Ikke tilgængelig
Handlinger med brøktal i henhold til IEC 60559 (bilag F) __STDC_IEC_559__ selektivt
Kompleks tal aritmetik i overensstemmelse med IEC 60559 (bilag G) __STDC_IEC_559_COMPLEX__ selektivt
Kontrolgrænseflader for matrixgrænser (bilag K) __STDC_LIB_EXT1__ Ikke tilgængelig
Komplekse taltyper ( <complex.h>) __STDC_NO_COMPLEX__ Nødvendigvis
Flertrådet programmering ( <threads.h>) __STDC_NO_THREADS__ Ikke tilgængelig
Atomoperationer ( <stdatomic.h>og typekvalifikation _Atomic) ​​[17] __STDC_NO_ATOMICS__ Ikke tilgængelig
Variable Længde Arrays __STDC_NO_VLA__ Nødvendigvis

Se også

  • C99 , den tidligere specifikation for C -sproget
  • C++11 , den nye vedtagne C++-standard (også kendt som C++0x  , et kodenavn på tidspunktet for dens udvikling)

Noter

  1. ISO/IEC 9899:2011 - Informationsteknologi - Programmeringssprog - C . Behandlingsdato: 22. december 2011. Arkiveret fra originalen 27. december 2011.
  2. ISO/IEC JTC1/SC22/WG14 er den internationale standardiseringsarbejdsgruppe for programmeringssproget C . Hentet 22. september 2011. Arkiveret fra originalen 12. februar 2018.
  3. WG14 N1250 C1X-chartret . Hentet 22. september 2011. Arkiveret fra originalen 24. september 2015.
  4. WG14 N1460 Underindstilling af C-standarden . Hentet 22. september 2011. Arkiveret fra originalen 31. marts 2022.
  5. Brad Kelechava. Den nuværende C-programmeringssprogsstandard - ISO/IEC 9899:2018 (C18) . ANSI (13. november 2018). Hentet 11. juni 2019. Arkiveret fra originalen 11. april 2022.
  6. 1 2 WG14 N1570 Udvalgsudkast - 12. april 2011 . Hentet 22. september 2011. Arkiveret fra originalen 25. december 2021.
  7. Fejlrapport #411 . www.open-std.org. Hentet 28. januar 2016. Arkiveret fra originalen 18. januar 2019.
  8. GCC 4.6 Release Series - Ændringer, nye funktioner og rettelser - GNU Project - Free Software Foundation (FSF) . gcc.gnu.org. Hentet 28. januar 2016. Arkiveret fra originalen 4. november 2015.
  9. Clang 3.1 Release Notes . llvm.org. Hentet 28. januar 2016. Arkiveret fra originalen 4. marts 2016.
  10. Understøttelse af ISO C11 tilføjet til IBM XL C/C++  compilere . www.ibm.com (17. april 2014). Hentet 28. januar 2016. Arkiveret fra originalen 8. marts 2021.
  11. WG14 N1516 Udvalgsudkast - 4. oktober 2010 . Hentet 22. september 2011. Arkiveret fra originalen 10. marts 2012.
  12. Berin Babcock-McConnell API02-C. Funktioner, der læser eller skriver til eller fra et array, bør tage et argument for at angive kilden eller målstørrelsen (død reference) . Arkiveret fra originalen den 29. september 2011. 
  13. WG14 N1327 Opgivelse af en proces . Hentet 22. september 2011. Arkiveret fra originalen 20. januar 2022.
  14. WG14 N1464 Oprettelse af kompleks værdi . Hentet 22. september 2011. Arkiveret fra originalen 10. marts 2012.
  15. WG14 N1548 udvalgsudkast - 2. december 2010 Arkiveret 22. december 2017 på Wayback Machine 6.10.8.3 Makroer til betingede funktioner
  16. ISO 9899:1999 6.10.8 Foruddefinerede makronavne
  17. WG14 N1558 Marts 14-18 mødereferat (udkast) . Hentet 22. september 2011. Arkiveret fra originalen 20. januar 2022.

Links