stringtranslate.com

C11 (revisión estándar C)

C11 (anteriormente C1X ) es un nombre informal para ISO/IEC 9899:2011 , [1] un estándar anterior para el lenguaje de programación C. Reemplazó al C99 (estándar ISO/IEC 9899:1999) y ha sido reemplazado por el C17 (estándar ISO/IEC 9899:2018). C11 estandariza principalmente características que ya son compatibles con los compiladores contemporáneos comunes e incluye un modelo de memoria detallado para admitir mejor múltiples subprocesos de ejecución. Debido al retraso en la disponibilidad de implementaciones conformes a C99, C11 hace que ciertas funciones sean opcionales para facilitar el cumplimiento del estándar del lenguaje central. [2] [3]

El borrador final, N1570, [4] se publicó en abril de 2011. La nueva norma pasó su revisión del borrador final el 10 de octubre de 2011 y fue ratificada oficialmente por ISO y publicada como ISO/IEC 9899:2011 el 8 de diciembre de 2011, con no hay comentarios que requieran resolución por parte de los organismos nacionales participantes.

__STDC_VERSION__Se define una macro estándar con un valor 201112Lpara indicar que la compatibilidad con C11 está disponible. [5]

Cambios desde C99

El estándar incluye varios cambios en el lenguaje C99 y las especificaciones de la biblioteca, como [6]

#define cbrt(x) _Generic((x), doble largo: cbrtl, \  default: cbrt, \  float: cbrtf)(x)

Características opcionales

La nueva revisión permite que las implementaciones no admitan ciertas partes del estándar, incluidas algunas que eran obligatorias en la revisión de 1999. [12] Los programas pueden usar macros predefinidas para determinar si una implementación admite una determinada característica o no.

Soporte del compilador

Algunas características de C11 son compatibles con GCC a partir de la versión 4.6, [16] Clang a partir de la versión 3.1, [17] IBM XL C a partir de la versión 12.1, [18] y Microsoft Visual C++ a partir de VS 2019 (16.8) [19 ] en septiembre de 2020.

Crítica

Las interfaces opcionales de verificación de límites (Anexo K) siguen siendo controvertidas y no se han implementado ampliamente, y se ha propuesto su desaprobación o eliminación de la próxima revisión estándar. [20] Incluso Microsoft, uno de los principales defensores de esta interfaz, no se ajusta a la definición. [21] Además, el Anexo K no incluye las más útiles TR24731-2 (funciones de asignación dinámica), como vasprintfy open_memstream. [22] Las pocas implementaciones de código abierto incluyen la biblioteca "Safer C" de Open Watcom C/C++ [23] y safeclib. [24]

Ver también

Referencias

  1. ^ "ISO/IEC 9899:2011 - Tecnología de la información - Lenguajes de programación - C". www.iso.org .
  2. ^ "WG14 N1250 La Carta C1X" (PDF) .
  3. ^ "Subconfiguración del estándar C". www.open-std.org .
  4. ^ Borrador del Comité WG14 N1570 - 12 de abril de 2011
  5. ^ "Informe de defectos n.º 411". ISO/IEC JTC1/SC22/WG14 - C. Febrero de 2012 . Consultado el 4 de mayo de 2012 .
  6. ^ Borrador del Comité WG14 N1516 - 4 de octubre de 2010
  7. ^ "Biblioteca de operaciones atómicas - cppreference.com". es.cppreference.com .
  8. ^ "WG14 N1286 -" Sobre compatibilidad con TR-19769 y nuevos tipos de caracteres ", Nick Stoughton, Larry Dwyer" (PDF) .
  9. ^ Berin Babcock-McConnell. "API02-C. Las funciones que leen o escriben en o desde una matriz deben tomar un argumento para especificar el tamaño de origen o de destino".
  10. ^ "Abandonar un proceso". www.open-std.org .
  11. ^ "Creación de valor complejo". www.open-std.org .
  12. ^ Borrador del Comité WG14 N1548 - 2 de diciembre de 2010 6.10.8.3 Macros de funciones condicionales
  13. ^ ISO 9899:1999 6.10.8 Nombres de macros predefinidos
  14. ^ "Actas de la reunión del WG14 N1558 del 14 al 18 de marzo (borrador)" (PDF) .
  15. ^ Lenguajes de programación ISO 9899:2011 - C 6.7.6.2 4
  16. ^ "Serie de lanzamientos de GCC 4.6: cambios, nuevas funciones y correcciones - Proyecto GNU - Free Software Foundation (FSF)". gcc.gnu.org .
  17. ^ "Notas de la versión de Clang 3.1". llvm.org .
  18. ^ "Se agregó soporte para ISO C11 a los compiladores IBM XL C/C++". www.ibm.com . 17 de abril de 2014.
  19. ^ "El soporte estándar C11 y C17 llega a MSVC". devblogs.microsoft.com . 14 de septiembre de 2020.
  20. ^ "N1969 - Experiencia de campo actualizada con el anexo K - Interfaces de verificación de límites". www.open-std.org .
  21. ^ Leffler, Jonathan. "c - ¿Utiliza las funciones 'seguras' del TR 24731?". Desbordamiento de pila .
  22. ^ "c - ¿Utiliza las funciones 'seguras' del TR 24731?". Desbordamiento de pila .
  23. ^ "Biblioteca C más segura: abrir Watcom". 3 de mayo de 2015. Archivado desde el original el 3 de mayo de 2015.
  24. ^ "safec: Biblioteca Safe C - LÉAME". rurban.github.io .

Otras lecturas

enlaces externos