C11

De la Viquipèdia, l'enciclopèdia lliure
C11

Tipusedició d'estàndard ISO Modifica el valor a Wikidata
Versió inicial
desembre 2011 Modifica el valor a Wikidata
Epònim2011 Modifica el valor a Wikidata
Més informació
Lloc webiso.org… (anglès) Modifica el valor a Wikidata
Stack ExchangeEtiqueta Modifica el valor a Wikidata


C99 Modifica el valor a Wikidata
C17 (en) Tradueix Modifica el valor a Wikidata

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[modifica]

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:
#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 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[modifica]

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[modifica]

  1. «ISO/IEC 9899:2011 - Information technology -- Programming languages -- C» (en anglès). www.iso.org.
  2. «Subsetting the C Standard» (en anglès). www.open-std.org.
  3. «Defect report #411» (en anglès). ISO/IEC JTC1/SC22/WG14 - C, febrer 2012. [Consulta: 4 maig 2012].
  4. «GCC 4.6 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF)» (en anglès). gcc.gnu.org.
  5. «Clang 3.1 Release Notes» (en anglès). llvm.org.
  6. «Support for ISO C11 added to IBM XL C/C++ compilers» (en anglès). www.ibm.com, 17-04-2014.
  7. «C11 and C17 Standard Support Arriving in MSVC» (en anglès). devblogs.microsoft.com, 14-09-2020.