stringtranslate.com

C11 (revisión del estándar C)

C11 (anteriormente C1X , formalmente ISO/IEC 9899:2011 ), [1] es un estándar anterior para el lenguaje de programación C. Reemplazó a C99 (estándar ISO/IEC 9899:1999) y ha sido reemplazado por 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 brindar un mejor soporte a múltiples subprocesos de ejecución. Debido a la disponibilidad tardía de implementaciones conformes con C99, C11 hace que ciertas características sean opcionales, para que sea más fácil cumplir con el 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 de 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, sin comentarios que requirieran resolución por parte de los organismos nacionales participantes.

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

Cambios respecto a C99

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

#define cbrt(x) _Generic((x), largo doble: cbrtl, \  predeterminado: cbrt, \  flotante: cbrtf)(x)

Características opcionales

La nueva revisión permite que las implementaciones no admitan ciertas partes del estándar, incluidas algunas que habían sido 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.

Compatibilidad con compiladores

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 de comprobación de límites opcionales (Anexo K) siguen siendo controvertidas y no se han implementado ampliamente, y se ha propuesto su desuso o eliminación de la próxima revisión estándar. [20] Incluso Microsoft, un defensor principal de esta interfaz, no se ajusta a la definición. [21] Además, el Anexo K no incluye el más útil 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]

Véase 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 del C1X" (PDF) .
  3. ^ "Subconjunto del estándar C". www.open-std.org .
  4. ^ Borrador del Comité N1570 del WG14 — 12 de abril de 2011
  5. ^ "Informe de defecto n.° 411". ISO/IEC JTC1/SC22/WG14 - C. Febrero de 2012. Consultado el 4 de mayo de 2012 .
  6. ^ Borrador del Comité N1516 del WG14 — 4 de octubre de 2010
  7. ^ "Biblioteca de operaciones atómicas - cppreference.com". en.cppreference.com .
  8. ^ "WG14 N1286 — "Sobre el soporte para 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 una matriz deben tomar un argumento para especificar el tamaño de origen o destino".
  10. ^ "Abandono de 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 características condicionales
  13. ^ ISO 9899:1999 6.10.8 Nombres de macro predefinidos
  14. ^ "Actas de la reunión del WG14 N1558 del 14 al 18 de marzo (borrador)" (PDF) .
  15. ^ ISO 9899:2011 Lenguajes de programación - C 6.7.6.2 4
  16. ^ "Serie de lanzamiento de GCC 4.6 — Cambios, nuevas características 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 ha añadido compatibilidad con ISO C11 a los compiladores IBM XL C/C++". www.ibm.com . 17 de abril de 2014.
  19. ^ "El soporte estándar para 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' de TR 24731?". Desbordamiento de pila .
  22. ^ "c - ¿Utiliza las funciones 'seguras' de TR 24731?". Desbordamiento de pila .
  23. ^ "Biblioteca Safer C - Open Watcom". 3 de mayo de 2015. Archivado desde el original el 3 de mayo de 2015.
  24. ^ "safec: Biblioteca Safe C - README". rurban.github.io .

Lectura adicional

Enlaces externos