C99
Tipus | edició d'estàndard ISO |
---|---|
Versió inicial | |
Epònim | 1999 |
Característiques tècniques | |
Plataforma | C standard library |
← ANSI C C11 → |
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 tipuscomplex
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 argumentsfloat
,double
olong 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]- ↑ «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].