# C11

C11 (anteriorment C1X) és un nom informal per a ISO/IEC 9899:2011, 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.
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.

## 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üent cbrt(x) es tradueix a cbrtl(x), cbrt(x) o cbrtf(x) segons el tipus de 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 i char32_t per emmagatzemar dades codificades UTF-16 / UTF-32, incloses les funcions de conversió a < uchar.h > i la cadena u i U corresponent prefixos literals, així com el prefix u8 per a literals codificats UTF-8).
* Eliminació de la funció gets (a favor de fgets 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 a fopen. Això es comporta com O_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 si imaginary é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, Clang a partir de la versió 3.1, IBM XL C a partir de la versió 12.1, i Microsoft Visual C++ a partir de VS 2019 (16.8) 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.