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:
- https://en.wikipedia.org/wiki/C11_(C_standard_revision)
- http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
- http://blog.smartbear.com/codereviewer/c11-a-new-c-standard-aiming-at-safer-programming/
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ónaligned_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 macrocbrt(x)
traduce acbrtl(x)
,cbrt(x)
ocbrtf(x)
según el tipo dex
:#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
ychar32_t
para almacenar datosUTF-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 enUTF-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"
) paraopen
. Esto se comporta comoO_CREAT|O_EXCL
enPOSIX
, 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 conexit
. - Macros para la construcción de valores complejos (en parte porque
real + imaginary*I
Podría no dar el valor esperado siimaginary
es infinite oNaN
).
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óngets
(<stdio.h>
)
- agregó lasaligned_alloc
,at_quick_exit
yquick_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.