C11 (revisión estándar de C)


De Wikipedia, la enciclopedia libre
  (Redirigido desde C1X )
Saltar a navegación Saltar a búsqueda

C11 (antes C1X ) es un nombre informal para la norma ISO / IEC 9899: 2011 , [1] un pasado estándar 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 compiladores contemporáneos comunes e incluye un modelo de memoria detallado para soportar mejor múltiples subprocesos de ejecución. Debido a la demora en la disponibilidad de las implementaciones que cumplen con C99, C11 hace que ciertas características sean opcionales, para facilitar el cumplimiento del estándar de lenguaje central. [2] [3]

El borrador final, N1570, [4] se publicó en abril de 2011. El nuevo estándar pasó su revisión del borrador final el 10 de octubre de 2011 y fue ratificado oficialmente por ISO y publicado 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.

Una macro estándar __STDC_VERSION__se define con un valor 201112Lpara indicar que el soporte C11 está disponible. [5] Algunas características de C11 son compatibles con GCC a partir de la versión 4.6, [6] Clang a partir de la versión 3.1, [7] IBM XL C a partir de la versión 12.1, [8] y Microsoft Visual C ++ a partir de VS 2019 (16.8 ) [9] en septiembre de 2020.

Cambios de C99

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

  • Especificación de alineación ( _Alignasespecificador, _Alignofoperador, aligned_allocfunción, <stdalign.h>encabezado)
  • El _Noreturnespecificador de función y el <stdnoreturn.h>encabezado
  • Expresiones de tipo genérico utilizando la _Genericpalabra clave. Por ejemplo, la siguiente macro se cbrt(x)traduce en cbrtl(x), cbrt(x)o cbrtf(x)según el tipo de x:
#define cbrt (x) _Generic ((x), long double: cbrtl, \  default: cbrt, \  float: cbrtf) (x)
  • Soporte de subprocesos múltiples ( _Thread_localespecificador de clase de almacenamiento, <threads.h>encabezado que incluye funciones de creación / administración de subprocesos, mutex , variable de condición y funcionalidad de almacenamiento específica de subprocesos , así como <stdatomic.h>[11] para operaciones atómicas que admiten el modelo de memoria C11).
  • Mejora Unicode apoyo basado en el Informe C Unicode Técnica ISO / IEC TR 19769: 2004 ( char16_ty char32_ttipos para el almacenamiento de UTF-16 / UTF-32 datos codificados, incluyendo funciones de conversión en <uchar.h>y de los correspondientes uy Ude cadena prefijos literales, así como el u8prefijo para Literales codificados en UTF-8 ). [12]
  • Eliminación de la getsfunción (a favor de una función más segura fgets), que quedó en desuso en la revisión del estándar de lenguaje C anterior, ISO / IEC 9899: 1999 / Cor.3: 2007 (E).
  • Interfaces de verificación de límites (Anexo K). [13]
  • Características de analizabilidad (Anexo L).
  • Más macros para consultar las características de los tipos de punto flotante, con respecto a los números de punto flotante subnormales y el número de dígitos decimales que el tipo puede almacenar.
  • Estructuras y uniones anónimas , útiles cuando uniones y estructuras están anidadas, por ejemplo, en .struct T { int tag; union { float x; int n; }; };
  • Afirmaciones estáticas , que se evalúan durante la traducción en una fase posterior a #ify #error, cuando el traductor comprende los tipos.
  • Un modo exclusivo de creación y apertura ( "…x"sufijo) para fopen. Esto se comporta como O_CREAT|O_EXCLen POSIX , que se usa comúnmente para archivos de bloqueo .
  • La quick_exitfunción como una tercera forma de terminar un programa, destinada a realizar al menos una desinicialización mínima si exitfalla la terminación con . [14]
  • Una nueva timespec_getfunción y estructura correspondiente <time.h>con cierto grado de compatibilidad POSIX .
  • Macros para la construcción de valores complejos (en parte porque real + imaginary*Ipodría no producir el valor esperado si imaginaryes infinito o NaN ). [15]

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 para admitir en la revisión de 1999. [16] Los programas pueden utilizar macros predefinidas para determinar si una implementación admite una determinada función o no.

Crítica

Las interfaces de verificación de límites opcionales (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 los TR24731-2 (funciones de asignación dinámica) más útiles, 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

  • C ++ 20 , C ++ 17 , C ++ 14 , C ++ 11 , C ++ 03 , C ++ 98 , versiones del estándar del lenguaje de programación C ++
  • Compatibilidad de C y C ++

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. ^ "Subconjunto del estándar C" . www.open-std.org .
  4. ^ Borrador del Comité WG14 N1570 - 12 de abril de 2011
  5. ^ "Informe de defectos # 411" . ISO / IEC JTC1 / SC22 / WG14 - C. Febrero de 2012 . Consultado el 4 de mayo de 2012 .
  6. ^ "GCC 4.6 Release Series - Cambios, nuevas características y correcciones - Proyecto GNU - Free Software Foundation (FSF)" . gcc.gnu.org .
  7. ^ "Notas de la versión Clang 3.1" . llvm.org .
  8. ^ "Soporte para ISO C11 agregado a compiladores IBM XL C / C ++" . www.ibm.com . 17 de abril de 2014.
  9. ^ "Soporte estándar C11 y C17 llegando a MSVC" . devblogs.microsoft.com . 14 de septiembre de 2020.
  10. ^ Borrador del Comité WG14 N1516 - 4 de octubre de 2010
  11. ^ "Biblioteca de operaciones atómicas - cppreference.com" . en.cppreference.com .
  12. ^ "WG14 N1286 -" Sobre la compatibilidad con TR-19769 y nuevos tipos de caracteres ", Nick Stoughton, Larry Dwyer" (PDF) .
  13. ^ 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 destino" .
  14. ^ "Abandonar un proceso" . www.open-std.org .
  15. ^ "Creación de valor complejo" . www.open-std.org .
  16. ^ Borrador del Comité WG14 N1548 - 2 de diciembre de 2010 6.10.8.3 Macros de características condicionales
  17. ^ ISO 9899: 1999 6.10.8 Nombres de macro predefinidos
  18. ^ "WG14 N1558 14-18 de marzo actas de la reunión (borrador)" (PDF) .
  19. ^ ISO 9899: 2011 lenguajes de programación - C 6.7.6.2 4
  20. ^ "N1969 - Experiencia de campo actualizada con el anexo K - Interfaces de comprobació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 C más segura - Watcom abierto" . 3 de mayo de 2015. Archivado desde el original el 3 de mayo de 2015 .
  24. ^ "safec: Safe C Library - README" . rurban.github.io .

enlaces externos

  • La Carta C1X
  • N1570 , el borrador final de C1X, de fecha 12 de abril de 2011
  • Sitio web oficial del Grupo de trabajo ISO C
  • El borrador estándar en ASCII simple y formularios HTML vinculados, además del PDF.
  • Biblioteca C segura de API limitadas
  • Plum, Thomas (6 de abril de 2012). "C finalmente obtiene un nuevo estándar" . Diario del Dr. Dobb .
  • Safe C API: solución concisa de desbordamiento de búfer, The OWASP Foundation, OWASP AppSec, Beijing 2011
Obtenido de " https://en.wikipedia.org/w/index.php?title=C11_(C_standard_revision)&oldid=1038821104 "