C11
Tipus | edició d'estàndard ISO |
---|---|
Versió inicial | |
Epònim | 2011 |
Més informació | |
Lloc web | iso.org… (anglès) |
Stack Exchange | Etiqueta |
| |
← C99 |
C11 (anteriorment C1X) és un nom informal per a ISO/IEC 9899:2011,[1] un estàndard passat per al llenguatge de programació C. Va substituir C99 (estàndard ISO/IEC 9899:1999) i ha estat substituït per C17 (estàndard ISO/IEC 9899:2018). C11 estandarditza principalment les funcions que ja són compatibles amb els compiladors contemporanis comuns i inclou un model de memòria detallat per donar suport millor a múltiples fils d'execució. A causa del retard en la disponibilitat de les implementacions C99 conformes, C11 fa que certes característiques siguin opcionals, per facilitar el compliment de l'estàndard d'idioma bàsic.[2]
L'esborrany final, N1570, es va publicar l'abril de 2011. La nova norma va aprovar la seva revisió de l'esborrany final el 10 d'octubre de 2011 i va ser ratificada oficialment per ISO i publicada com a ISO/IEC 9899:2011 el 8 de desembre de 2011, sense cap comentari que requeria resolució per part dels organismes nacionals participants.
Es defineix una macro estàndard __STDC_VERSION__
amb el valor 201112L
per indicar que el suport C11 està disponible.[3]
Canvis de C99
L'estàndard inclou diversos canvis al llenguatge C99 i a les especificacions de la biblioteca, com ara
- Especificació d'alineació (especificador
_Alignas
, operador_Alignof
, funcióaligned_alloc
,< stdalign.h >
capçalera) - L'especificador de la funció
_Noreturn
i la capçalera< stdnoreturn.h >
- Expressions de tipus genèric amb la paraula clau
_Generic
. Per exemple, la macro següentcbrt(x)
es tradueix acbrtl(x)
,cbrt(x)
ocbrtf(x)
segons el tipus dex
:
#define cbrt(x) _Generic((x), long double: cbrtl, \
default: cbrt, \
float: cbrtf)(x)
- Suport multiprocés (especificador de classe d'emmagatzematge
_Thread_local
, capçalera< threads.h >
que inclou funcions de creació/gestió de fils, mutex, variable de condició i funcionalitat d'emmagatzematge específica del fil, així com< stdatomic.h >
per a operacions atòmiques compatibles el model de memòria C11). - Suport Unicode millorat basat en l'informe tècnic C Unicode ISO/IEC TR 19769:2004 (tipus
char16_t
ichar32_t
per emmagatzemar dades codificades UTF-16 / UTF-32, incloses les funcions de conversió a< uchar.h >
i la cadenau
iU
corresponent prefixos literals, així com el prefixu8
per a literals codificats UTF-8). - Eliminació de la funció
gets
(a favor defgets
més segurs ), que estava obsoleta a la revisió de l'estàndard del llenguatge C anterior, ISO/IEC 9899:1999/Cor.3:2007(E). - Interfícies de comprovació de límits (annex K).
- Característiques d'analització (annex L).
- Més macros per consultar les característiques dels tipus de coma flotant, pel que fa als números subnormals de coma flotant i el nombre de dígits decimals que el tipus és capaç d'emmagatzemar.
- Estructures i unions anònimes, útils quan les unions i les estructures estan imbricades, p. ex. in
struct T { int tag; union { float x; int n; }; };
. - Assercions estàtiques, que s'avaluen durant la traducció en una fase posterior que
#if
i#error
, quan el traductor entén els tipus. - Un mode exclusiu de creació i obertura (sufix
"…x"
) per afopen
. Això es comporta comO_CREAT|O_EXCL
a POSIX, que s'utilitza habitualment per als fitxers de bloqueig. - La funció
quick_exit
com a tercera manera d'acabar un programa, destinada a fer almenys una desinicialització mínima. - Una nova funció
timespec_get
i l'estructura corresponent a< time.h >
amb un grau de compatibilitat POSIX. - Macros per a la construcció de valors complexos (en part perquè
real + imaginary*I
podria no donar el valor esperat siimaginary
és infinit o NaN).
Suport del compilador
Algunes característiques de C11 són compatibles amb el GCC a partir de la versió 4.6,[4] Clang a partir de la versió 3.1,[5] IBM XL C a partir de la versió 12.1,[6] i Microsoft Visual C++ a partir de VS 2019 (16.8) [7] al setembre de 2020.
Referències
- ↑ «ISO/IEC 9899:2011 - Information technology -- Programming languages -- C» (en anglès). www.iso.org.
- ↑ «Subsetting the C Standard» (en anglès). www.open-std.org.
- ↑ «Defect report #411» (en anglès). ISO/IEC JTC1/SC22/WG14 - C, 01-02-2012. [Consulta: 4 maig 2012].
- ↑ «GCC 4.6 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF)» (en anglès). gcc.gnu.org.
- ↑ «Clang 3.1 Release Notes» (en anglès). llvm.org.
- ↑ «Support for ISO C11 added to IBM XL C/C++ compilers» (en anglès). www.ibm.com, 17-04-2014.
- ↑ «C11 and C17 Standard Support Arriving in MSVC» (en anglès). devblogs.microsoft.com, 14-09-2020.