# C99

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. 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. La versió C11 de l'estàndard del llenguatge de programació C, publicada el 2011, actualitza C99.

## Història

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

C99 és, en la seva major part, compatible amb C89, però és més estricte d'alguna manera.
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:
* 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

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.

## Referències

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