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]
- Datajustering . For at gøre dette blev en specifier _Alignas, en operator alignof, en funktion aligned_allocog en header-fil <stdalign.h> tilføjet til sproget ;
- Funktionsspecifikation _Noreturn;
- Typegeneriske udtryk ved hjælp af søgeordet _Generic. F.eks. oversættes følgende kuberodsmakro til , eller afhængigt af parametertypen : cbrt(x)cbrtl(x)cbrt(x)cbrtf(x)x
#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
- ↑ ISO/IEC 9899:2011 - Informationsteknologi - Programmeringssprog - C . Behandlingsdato: 22. december 2011. Arkiveret fra originalen 27. december 2011. (ubestemt)
- ↑ ISO/IEC JTC1/SC22/WG14 er den internationale standardiseringsarbejdsgruppe for programmeringssproget C . Hentet 22. september 2011. Arkiveret fra originalen 12. februar 2018. (ubestemt)
- ↑ WG14 N1250 C1X-chartret . Hentet 22. september 2011. Arkiveret fra originalen 24. september 2015. (ubestemt)
- ↑ WG14 N1460 Underindstilling af C-standarden . Hentet 22. september 2011. Arkiveret fra originalen 31. marts 2022. (ubestemt)
- ↑ 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. (ubestemt)
- ↑ 1 2 WG14 N1570 Udvalgsudkast - 12. april 2011 . Hentet 22. september 2011. Arkiveret fra originalen 25. december 2021. (ubestemt)
- ↑ Fejlrapport #411 . www.open-std.org. Hentet 28. januar 2016. Arkiveret fra originalen 18. januar 2019. (ubestemt)
- ↑ 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. (ubestemt)
- ↑ Clang 3.1 Release Notes . llvm.org. Hentet 28. januar 2016. Arkiveret fra originalen 4. marts 2016. (ubestemt)
- ↑ 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.
- ↑ WG14 N1516 Udvalgsudkast - 4. oktober 2010 . Hentet 22. september 2011. Arkiveret fra originalen 10. marts 2012. (ubestemt)
- ↑ 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. (ubestemt)
- ↑ WG14 N1327 Opgivelse af en proces . Hentet 22. september 2011. Arkiveret fra originalen 20. januar 2022. (ubestemt)
- ↑ WG14 N1464 Oprettelse af kompleks værdi . Hentet 22. september 2011. Arkiveret fra originalen 10. marts 2012. (ubestemt)
- ↑ WG14 N1548 udvalgsudkast - 2. december 2010 Arkiveret 22. december 2017 på Wayback Machine 6.10.8.3 Makroer til betingede funktioner
- ↑ ISO 9899:1999 6.10.8 Foruddefinerede makronavne
- ↑ WG14 N1558 Marts 14-18 mødereferat (udkast) . Hentet 22. september 2011. Arkiveret fra originalen 20. januar 2022. (ubestemt)
Links
C programmeringssprog |
---|
|
Kompilere |
|
---|
Biblioteker |
|
---|
Ejendommeligheder |
|
---|
Nogle efterkommere |
|
---|
C og andre sprog |
|
---|
Kategori:C programmeringssprog |