Vés al contingut

C99

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

Tipusedició d'estàndard ISO Modifica el valor a Wikidata
Versió inicial
desembre 1999 Modifica el valor a Wikidata
Epònim1999 Modifica el valor a Wikidata
Característiques tècniques
PlataformaC standard library

ANSI C Modifica el valor a Wikidata
C11 Modifica el valor a Wikidata

C99 (anteriorment conegut com C9X) és un nom informal per a ISO/IEC 9899:1999, una versió anterior de l'estàndard del llenguatge de programació C. [1] Amplia la versió anterior (C90) amb noves característiques per al llenguatge i la biblioteca estàndard, i ajuda a les implementacions a fer un millor ús del maquinari informàtic disponible, com ara l'aritmètica de coma flotant IEEE 754-1985 i la tecnologia del compilador.[2] La versió C11 de l'estàndard del llenguatge de programació C, publicada el 2011, actualitza C99.

Història

[modifica]

Després que ANSI va produir l'estàndard oficial per al llenguatge de programació C el 1989, que es va convertir en un estàndard internacional el 1990, l'especificació del llenguatge C va romandre relativament estàtica durant algun temps, mentre que C++ va continuar evolucionant, en gran part durant el seu propi esforç d'estandardització. L'esmena normativa 1 va crear un nou estàndard per a C l'any 1995, però només per corregir alguns detalls de l'estàndard de 1989 i afegir un suport més ampli per als jocs de caràcters internacionals. L'estàndard es va sotmetre a una nova revisió a finals de la dècada de 1990, donant lloc a la publicació de la norma ISO/IEC 9899:1999 el 1999, que es va adoptar com a estàndard ANSI el maig de 2000. L'idioma definit per aquesta versió de l'estàndard s'anomena comunament "C99". El grup de treball ISO/IEC JTC1/SC22 /WG14 manté l'estàndard C internacional.

Disseny

[modifica]

C99 és, en la seva major part, compatible amb C89, però és més estricte d'alguna manera.[3]

En particular, una declaració que no té un especificador de tipus ja no ha assumit int implícitament. El comitè d'estàndards C va decidir que era més valuós per als compiladors diagnosticar l'omissió inadvertida de l'especificador de tipus que no pas processar en silenci el codi heretat que es basava en int implícit. A la pràctica, és probable que els compiladors mostrin un avís, després assumeixen int i continuen traduint el programa.

C99 va introduir diverses funcions noves, moltes de les quals ja s'havien implementat com a extensions en diversos compiladors: [4]

  • funcions en línia
  • Declaracions i codi entremesclats: la declaració de variables ja no està restringida a l'àmbit del fitxer o a l'inici d'una instrucció composta (bloc)
  • diversos tipus de dades nous, inclosos long long int, tipus d'enters estesos opcionals, un tipus de dades booleà explícit i un tipus complex per representar nombres complexos
  • matrius de longitud variable (tot i que posteriorment es van relegar a C11 a una característica condicional que les implementacions no han de suportar)
  • membres de la matriu flexible
  • suport per a comentaris d'una línia que comencen per //, com en BCPL, C++ i Java
  • noves funcions de biblioteca, com ara snprintf
  • capçaleres noves, com ara < stdbool.h >, < complex.h >, < tgmath.h > i < inttypes.h >
  • funcions matemàtiques (macro) genèriques de tipus, a <tgmath.h>, que seleccionen una funció de biblioteca matemàtica basada en arguments float, double o long double, etc.
  • suport millorat per a punt flotant IEEE
  • inicialitzadors designats (per exemple, inicialitzar una estructura per noms de camp: struct point p = {.x = 1,.y = 2 }; )
  • literals compostos (per exemple, és possible construir estructures en crides de funcions: function((struct x) {1, 2}) )
  • suport per a macros variables (macros amb un nombre variable d'arguments)
  • La qualificació restrict permet una optimització de codi més agressiva, eliminant els avantatges d'accés a la matriu en temps de compilació que abans tenia FORTRAN sobre ANSI C
  • noms de caràcters universals, que permeten que les variables d'usuari continguin altres caràcters que el conjunt de caràcters estàndard: seqüències hexadecimals de quatre dígits \u0040 o vuit dígits \U0001f431
  • paraula clau static en índexs de matriu en declaracions de paràmetres

Parts de l'estàndard C99 s'inclouen a la versió actual de l'estàndard C++, inclosos els tipus d'enters, les capçaleres i les funcions de biblioteca. Les matrius de longitud variable no es troben entre aquestes parts incloses perquè la biblioteca de plantilles estàndard de C++ ja inclou una funcionalitat similar.

IEEE 754: suport de coma flotant

[modifica]

Una característica important de C99 és el seu suport numèric i, en particular, el seu suport per a l'accés a les funcions de IEEE 754-1985 (també conegut com IEC). 60559) maquinari de coma flotant present a la gran majoria dels processadors moderns (definit a "Annex F IEC 60559 aritmètica de coma flotant"). Plataformes sense IEEE El maquinari 754 també el pot implementar al programari.[5]

Referències

[modifica]
  1. «ISO/IEC 9899:1999 - Programming languages - C» (en anglès). Iso.org, 08-12-2011. [Consulta: 8 abril 2014].
  2. «IEEE 754 Support in C99» (en anglès). grouper.ieee.org. Arxivat de l'original el 2017-10-28. [Consulta: 15 juliol 2021].
  3. «Standards - Using the GNU Compiler Collection (GCC)» (en anglès). Gcc.gnu.org. [Consulta: 8 abril 2014].
  4. «C Dialect Options - Using the GNU Compiler Collection (GCC)» (en anglès). Gcc.gnu.org, 06-05-2009. [Consulta: 8 abril 2014].
  5. «IEEE 754 Support in C99» (en anglès). grouper.ieee.org. Arxivat de l'original el 2017-10-28. [Consulta: 15 juliol 2021].