standard compiler c c99 c11

standard - c11 compiler



diferencia entre c99 y c11 (2)

Estoy aprendiendo c, actualmente. El libro que leí está basado en C99. Quiero actualizar mi conocimiento a C11 después de terminar este libro, o cambiar el recurso si hay una diferencia importante. Por lo tanto, lo que pido es una explicación o un recurso para actualizar mi conocimiento. Solo encontré esta fuente . Sin embargo, no parece abarcar la información que necesito o no es concisa.

Gracias por adelantado. PD: quiero aprender C11 ya que creo que es el estándar prevaleciente ahora. Si no, por favor infórmeme.


Buenas vistas generales del estándar C11:

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

  • Especificación de alineación (especificador de _Alignas , _Alignof operador, función aligned_alloc , <stdalign.h> archivo de cabecera)
  • El especificador de función _Noreturn y el archivo de encabezado <stdnoreturn.h>
  • Expresiones de tipo genérico utilizando la palabra clave _Generic . Por ejemplo, la siguiente macro cbrt(x) traduce a 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)

  • Compatibilidad con subprocesos múltiples (especificador de clase de almacenamiento _Thread_local , <threads.h> incluye funciones de creación / administración de subprocesos, <threads.h> , variable de condición y funcionalidad de almacenamiento específica del subproceso, así como el _Atomic tipo _Atomic y <stdatomic.h> para ininterrumpible acceso a objetos).

  • Compatibilidad con Unicode mejorada basada en el Informe Técnico ISO / IEC TR 19769: 2004 de C Unicode (tipos char16_t y char32_t para almacenar datos UTF-16/UTF-32 , incluidas las funciones de conversión en <uchar.h> y las cadenas de U y U correspondientes prefijos literales, así como el prefijo u8 para literales codificados en UTF-8 ).
  • Eliminación de la función gets , obsoleta en la revisión estándar del lenguaje C anterior, ISO / IEC 9899: 1999 / Cor.3: 2007 (E), a favor de una nueva alternativa segura, gets_s .
  • Interfaces de verificación de límites (anexo K).
  • Características de análisis (anexo L).
  • Más macros para consultar las características de los tipos de punto flotante, en relación con los números de punto flotante subnormales y el número de dígitos decimales que el tipo puede almacenar.
  • Estructuras anónimas y uniones, útiles cuando las uniones y estructuras están anidadas, por ejemplo, en la struct T { int tag; union { float x; int n; }; }; 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 #if y #error , cuando el traductor entiende los tipos.
  • Un modo exclusivo de crear y abrir (sufijo "…x" ) para open . Esto se comporta como O_CREAT|O_EXCL en POSIX , que se usa comúnmente para bloquear archivos.
  • La función quick_exit como una tercera forma de terminar un programa, pretende hacer al menos una desinicialización mínima si falla la terminación con exit .
  • Macros para la construcción de valores complejos (en parte porque real + imaginary*I Podría no dar el valor esperado si imaginary es infinite o NaN ).

De acuerdo con el http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf , aquí están los principales cambios de C99:

Prefacio
...
6 Esta tercera edición cancela y reemplaza la segunda edición, ISO / IEC 9899: 1999, corregida por ISO / IEC 9899: 1999 / Cor 1: 2001, ISO / IEC 9899: 1999 / Cor 2: 2004, e ISO / IEC 9899 : 1999 / Cor 3: 2007. Los principales cambios de la edición anterior incluyen:

- características condicionales (opcionales) (incluidas algunas que antes eran obligatorias)

- soporte para múltiples subprocesos de ejecución que incluyen un modelo de secuenciación de memoria mejorado, objetos atómicos y almacenamiento local de subprocesos ( <stdatomic.h> y <threads.h> )

- macros características adicionales de punto flotante ( <float.h> )

- consultar y especificar alineación de objetos ( <stdalign.h> , <stdlib.h> )

- Caracteres y cadenas de Unicode ( <uchar.h> ) (originalmente especificados en ISO / IEC TR 19769: 2004)

- expresiones de tipo genérico

- afirmaciones estáticas

- Estructuras anónimas y sindicatos.

- funciones de no retorno

- macros para crear números complejos ( <complex.h> )

- Soporte para abrir archivos para acceso exclusivo.

- eliminó la función gets ( <stdio.h> )

- agregó las aligned_alloc , at_quick_exit y quick_exit ( <stdlib.h> )

- Soporte (condicional) para interfaces de verificación de límites (originalmente especificadas en ISO / IEC TR 24731−1: 2007)

- Soporte (condicional) para la capacidad de análisis.