stringtranslate.com

ANSI-C

ANSI C , ISO C y Standard C son estándares sucesivos para el lenguaje de programación C publicados por el American National Standards Institute (ANSI) e ISO/IEC JTC 1/SC 22 /WG 14 de la Organización Internacional de Normalización (ISO) y la Comisión Electrotécnica Internacional (IEC). Históricamente, los nombres se referían específicamente a la versión original y mejor compatible del estándar (conocida como C89 o C90 ). Se anima a los desarrolladores de software que escriben en C a cumplir los estándares, ya que hacerlo ayuda a la portabilidad entre compiladores.

Historia y perspectivas

El primer estándar para C fue publicado por ANSI. Aunque este documento fue adoptado posteriormente por ISO/IEC y las revisiones posteriores publicadas por ISO/IEC han sido adoptadas por ANSI, todavía se utiliza "ANSI C" para referirse a la norma. [1] Mientras que algunos desarrolladores de software utilizan el término ISO C, otros son neutrales respecto de los organismos de estándares y utilizan el Estándar C.

Especificación informal en 1978 ( libro de Brian Kernighan y Dennis Ritchie The C Programming Language ).

Estandarizando C

En 1983, el Instituto Nacional Estadounidense de Estándares formó un comité, X3J11, para establecer una especificación estándar de C. En 1985, se publicó el primer borrador estándar, a veces denominado C85 . En 1986, se publicó otro Proyecto de Norma, a veces denominado C86 . La versión preliminar del Estándar C se publicó en 1988 y, a veces, se la denomina C88 . [2]

C89

El estándar ANSI se completó en 1989 y se ratificó como ANSI X3.159-1989 "Lenguaje de programación C". Esta versión del lenguaje a menudo se denomina "ANSI C". Posteriormente, a veces se utiliza la etiqueta "C89" para distinguirlo del C90, pero utilizando el mismo método de etiquetado.

C90

El mismo estándar que C89 fue ratificado por ISO/IEC como ISO/IEC 9899:1990, con sólo cambios de formato, [3] que a veces se denomina C90. Por lo tanto, los términos "C89" y "C90" se refieren esencialmente al mismo lenguaje.

Esta norma ha sido retirada tanto por ANSI/INCITS [4] como por ISO/IEC. [5]

C95

En 1995, la ISO / IEC publicó una extensión, denominada Enmienda 1, para la norma C. Su nombre completo finalmente fue ISO/IEC 9899:1990/AMD1:1995 o apodado C95 . Además de la corrección de errores, hubo más cambios en las capacidades del idioma, [6] [7] tales como:

Además de la enmienda, ISO publicó dos corrigendos técnicos para C90:

Prueba de preprocesador para compatibilidad con C95

#si está definido(__STDC_VERSION__) && __STDC_VERSION__ >= 199409L/* Código fuente compatible con C95. */ #elif definido(__STDC__) /* Código fuente compatible con C89. */ #terminara si

C99

En marzo de 2000, ANSI adoptó la norma ISO/IEC 9899:1999. [10] Esta norma se conoce comúnmente como C99. Algunas adiciones notables al estándar anterior incluyen:

ISO publicó tres corrigendos técnicos para C99:

Esta norma ha sido retirada tanto por ANSI/INCITS [11] como por ISO/IEC [12] a favor de C11.

C11

C11 fue ratificado y publicado oficialmente el 8 de diciembre de 2011. Las características notables incluyen compatibilidad mejorada con Unicode , expresiones de tipo genérico que utilizan la nueva _Genericpalabra clave, una API multiplataforma y multiproceso ( threads.h) y compatibilidad con tipos atómicos tanto en el lenguaje principal como en la biblioteca. ( stdatomic.h).

ISO ha publicado un corrigendum técnico para C11:

C17

En octubre de 2018 , "C17" es el estándar actual para el lenguaje de programación C. [14]

C17 soluciona los defectos de C11 sin introducir nuevas características del lenguaje. [15]

C23

C23 es el nombre informal de la próxima revisión importante del estándar del lenguaje C. [dieciséis]

Otras publicaciones ISO relacionadas

Como parte del proceso de estandarización, ISO/IEC también publica informes técnicos y especificaciones relacionadas con el lenguaje C:

Se están desarrollando más especificaciones técnicas pendientes de aprobación, incluida la quinta y última parte de TS 18661, una especificación de memoria transaccional de software y extensiones de biblioteca paralela. [28]

Soporte de los principales compiladores

ANSI C ahora es compatible con casi todos los compiladores más utilizados. GCC y Clang son dos compiladores de C importantes y populares en la actualidad, ambos basados ​​en el C11 con actualizaciones que incluyen cambios de especificaciones posteriores como C17. [29] [30] Se garantiza virtualmente que cualquier código fuente escrito únicamente en C estándar y sin suposiciones dependientes del hardware se compilará correctamente en cualquier plataforma con una implementación conforme a C. Sin tales precauciones, la mayoría de los programas pueden compilarse sólo en una determinada plataforma o con un compilador particular, debido, por ejemplo, al uso de bibliotecas no estándar, como las bibliotecas GUI , o a la dependencia de atributos específicos del compilador o de la plataforma. como el tamaño exacto de ciertos tipos de datos y el tamaño de bytes .

Detectabilidad del cumplimiento

Para mitigar las diferencias entre K&R C y el estándar ANSI C, __STDC__se puede utilizar la macro ("estándar c") para dividir el código en secciones ANSI y K&R.

 #si está definido (__STDC__) && __STDC__ extern int getopt ( int , char * const * , const char * ); #else extern int getopt (); #terminara si               

En el ejemplo anterior, se utiliza un prototipo en una declaración de función para implementaciones compatibles con ANSI, mientras que en caso contrario se utiliza una declaración obsoleta que no es un prototipo. Siguen cumpliendo con ANSI a partir de C99. Observe cómo este código verifica tanto la definición como la evaluación: esto se debe a que algunas implementaciones pueden establecerse __STDC__en cero para indicar que no cumplen con ANSI. [31]

Soporte del compilador

Lista de compiladores que admiten ANSI C:

Ver también

Referencias

  1. ^ Brad Kelechava (14 de septiembre de 2017). "El origen de ANSI C e ISO C" . Consultado el 14 de agosto de 2018 .
  2. ^ Richard Hale Shaw (13 de septiembre de 1988). "Estándar C: el borrador ANSI crece". Revista PC . vol. 7, núm. 15. págs. 116-117 . Consultado el 15 de noviembre de 2022 .
  3. ^ "Estándares: uso de la colección de compiladores GNU (GCC)" . Consultado el 24 de junio de 2012 .
  4. ^ "INCITS/ISO/IEC 9899". www.techstreet.com . Consultado el 3 de octubre de 2018 .
  5. ^ "ISO/IEC 9899:1990 - Lenguajes de programación - C" . Consultado el 24 de junio de 2012 .
  6. ^ Pluma de Clive DW (12 de septiembre de 2010). "Una breve descripción del Anexo Normativo 1".
  7. ^ "ISO/IEC 9899:1990/Enmienda 1:1995". Organización Internacional de Normalización. 2013-03-22.
  8. ^ "ISO/IEC 9899:1990/Cor 1:1994". YO ASI . Consultado el 21 de enero de 2019 .
  9. ^ "ISO/IEC 9899:1990/Cor 2:1996". YO ASI . Consultado el 21 de enero de 2019 .
  10. ^ "ISO/CEI 9899:1999". YO ASI . Consultado el 21 de enero de 2019 .
  11. ^ "INCITS/ISO/IEC 9899-2012". ANSI.
  12. ^ "ISO/IEC 9899:1999 - Lenguajes de programación - C" . Consultado el 24 de junio de 2012 .
  13. ^ "ISO/IEC 9899:2011/Cor 1:2012". Organización Internacional de Normalización.
  14. ^ "ISO/IEC 9899:2018 - Tecnología de la información - Lenguajes de programación - C". www.iso.org .
  15. ^ "El estándar - C". www.iso-9899.info .
  16. ^ "Historia de C". cppreferencia .
  17. ^ "ISO/IEC TR 19769:2004". Organización Internacional de Normalización.
  18. ^ "ISO/IEC TR 24731-1:2007". Organización Internacional de Normalización.
  19. ^ "ISO/IEC TR 18037:2008". Organización Internacional de Normalización.
  20. ^ "ISO/IEC TR 24732:2009". Organización Internacional de Normalización.
  21. ^ "ISO/IEC TR 24747:2009". Organización Internacional de Normalización.
  22. ^ "ISO/IEC TR 24731-2:2010". Organización Internacional de Normalización.
  23. ^ "ISO/IEC TS 17961:2013". Organización Internacional de Normalización.
  24. ^ "ISO/IEC TS 18661-1:2014". Organización Internacional de Normalización.
  25. ^ "ISO/IEC TS 18661-2:2015". Organización Internacional de Normalización.
  26. ^ "ISO/IEC TS 18661-3:2015". Organización Internacional de Normalización.
  27. ^ "ISO/IEC TS 18661-4:2015". Organización Internacional de Normalización.
  28. ^ "Funciones experimentales de C". cppreference.com . Consultado el 16 de enero de 2016 .
  29. ^ "Dos estándares de idiomas admitidos por GCC: lenguaje 2.1 C". Usando la colección de compiladores GNU (GCC) . GCC, la colección de compiladores GNU . Consultado el 5 de febrero de 2019 .
  30. ^ "Compatibilidad de idiomas". Interfaz de la familia de lenguajes Clang C para LLVM . Consultado el 5 de febrero de 2019 .
  31. ^ "Nombres de macros predefinidos estándar". www.ibm.com . Consultado el 10 de abril de 2019 .
  32. ^ "Paquete para desarrolladores HP C/ANSI C" . Consultado el 12 de julio de 2015 .
  33. ^ Se agregó soporte para ISO C11 a los compiladores IBM XL C/C++
  34. ^ enlace a las páginas de Pelles C

Otras lecturas

enlaces externos