stringtranslate.com

Norma ANSI C

ANSI C , ISO C y Standard C son estándares sucesivos para el lenguaje de programación C publicados por el Instituto Nacional Estadounidense de Estándares (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 con mejor soporte del estándar (conocida como C89 o C90 ). Se anima a los desarrolladores de software que escriben en C a que cumplan con 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, "ANSI C" todavía se utiliza para referirse al estándar. [1] Mientras que algunos desarrolladores de software utilizan el término ISO C, otros son neutrales respecto de los organismos de normalización y utilizan el Estándar C.

Especificación informal en 1978 ( libro de Brian Kernighan y Dennis Ritchie El lenguaje de programación C ).

Estandarización 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 de estándar, a veces denominado C85 . En 1986, se publicó otro borrador de estándar, a veces denominado C86 . El estándar C preliminar se publicó en 1988, y a veces denominado 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 se conoce a menudo como "ANSI C". Más adelante, a veces se utiliza la etiqueta "C89" para distinguirlo de C90, pero utilizando el mismo método de etiquetado.

C90

La misma norma que C89 fue ratificada por la ISO/IEC como ISO/IEC 9899:1990, con solo cambios de formato, [3] a la que a veces se hace referencia como C90. Por lo tanto, los términos "C89" y "C90" se refieren a un lenguaje que es prácticamente idéntico.

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, llamada Enmienda 1, para el estándar C. Su nombre completo finalmente fue ISO/IEC 9899:1990/AMD1:1995 o apodado C95 . Además de la corrección de errores, hubo otros cambios en las capacidades del lenguaje, [6] [7] como:

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

Prueba del preprocesador para compatibilidad con C95

#si se define(__STDC_VERSION__) && __STDC_VERSION__ >= 199409L/* Código fuente compatible con C95. */ #elifdefined(__STDC__) /* Código fuente compatible con C89. */ #endif

C99

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

La ISO publicó tres correcciones técnicas para C99:

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

C11

C11 fue ratificado y publicado oficialmente el 8 de diciembre de 2011. Las características notables incluyen soporte Unicode mejorado , expresiones genéricas de tipo usando la _Genericpalabra clave new, una API multiplataforma de subprocesosthreads.h múltiples ( ) y soporte de tipos atómicos tanto en el lenguaje principal como en la biblioteca ( stdatomic.h).

La ISO ha publicado una corrección técnica para C11:

C17

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

C17 aborda 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. [16]

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 y a la espera de aprobación más especificaciones técnicas, 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 es compatible ahora con casi todos los compiladores de uso generalizado. GCC y Clang son dos compiladores de C importantes y populares en la actualidad, ambos basados ​​en C11 con actualizaciones que incluyen cambios de especificaciones posteriores como C17. [29] [30] Cualquier código fuente escrito solo en C estándar y sin suposiciones dependientes del hardware tiene virtualmente garantizada una compilación correcta en cualquier plataforma con una implementación de C conforme. Sin tales precauciones, la mayoría de los programas pueden compilarse solo en una determinada plataforma o con un compilador particular, debido, por ejemplo, al uso de bibliotecas no estándar, como 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 orden de bytes .

Detectabilidad de 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 se define(__STDC__) && __STDC__ externo int getopt ( int , char * const * , const char * ); #de lo contrario externo int getopt (); #finsi               

En el ejemplo anterior, se utiliza un prototipo en una declaración de función para implementaciones que cumplen con ANSI, mientras que en el resto de los casos se utiliza una declaración obsoleta que no es un prototipo. Estas 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]

Compatibilidad con compiladores

Lista de compiladores compatibles con ANSI C:

Véase 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». PC Magazine . 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. ^ Clive DW Feather (12 de septiembre de 2010). "Breve descripción del Anexo Normativo 1".
  7. ^ "ISO/IEC 9899:1990/Amd 1:1995". Organización Internacional de Normalización. 22 de marzo de 2013.
  8. ^ "ISO/IEC 9899:1990/Cor 1:1994". ISO . Consultado el 21 de enero de 2019 .
  9. ^ "ISO/IEC 9899:1990/Cor 2:1996". ISO . Consultado el 21 de enero de 2019 .
  10. ^ "ISO/IEC 9899:1999". ISO . 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". cppreference .
  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. ^ "Características experimentales de C". cppreference.com . Consultado el 16 de enero de 2016 .
  29. ^ "2 estándares de lenguaje soportados por GCC - Lenguaje C 2.1". Uso de la Colección de compiladores GNU (GCC) . GCC, la Colección de compiladores GNU . Consultado el 5 de febrero de 2019 .
  30. ^ "Compatibilidad de lenguajes". Interfaz de usuario de la familia de lenguajes Clang 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

Lectura adicional

Enlaces externos