c - language - iso 9899
Últimos cambios en C11 (3)
C1x se ha convertido en ISO / IEC 9899: 2011 también conocido como C11.
¿Alguien sabe qué cambios (si hay alguno) hay en el Estándar del borrador n1570 de abril de 2011 ?
ETA: hay actas del Comité de Londres (marzo de 2011) (que deben incluirse en n1570) here , y de Washington, DC (octubre de 2011) here ; Supongo que una lista de cambios aceptados en los minutos de DC debe cubrir las cosas.
Acabo de enterarme hoy de que hubo un cambio (algo) significativo entre N1570 y el estándar C11 final (ISO / IEC 9899: 2011 (E)).
En N1570, 6.3.2p3 dice:
Excepto cuando es el operando del operador
sizeof
, el operador_Alignof
, o el operador unario, o es un literal de cadena usado para inicializar una matriz, una expresión que tiene tipo "array of type " se convierte en una expresión con tipo " puntero para escribir "que apunta al elemento inicial del objeto matriz y no es un valor l.
La inclusión de _Alignof
fue un error, ya que la sintaxis de una expresión unaria permite
_Alignof ( type-name )
pero no
_Alignof unary-expression
El estándar C11 liberado corrige este error y revierte a la fraseología C99:
Excepto cuando es el operando del operador
sizeof
, o el operador unario, o es un literal de cadena usado para inicializar una matriz, una expresión que tiene el tipo "matriz de tipo " se convierte en una expresión con el tipo "puntero para escribir " que apunta al elemento inicial del objeto de matriz y no es un valor l.
Más información: en una publicación reciente en comp.std.c sobre las diferencias entre N1570 y el estándar publicado, Larry Jones, miembro del comité ISO C, escribió:
Hay varios de ellos, pero la mayoría son pequeños retoques editoriales, cambios en el texto repetitivo y barajando las cosas para mantener contentos los poderes. El mayor cambio fue eliminar _Alignof de un grupo de lugares que no debería haber sido agregado (basado en la noción errónea de que toma un tipo o una expresión como sizeof does cuando realmente solo se necesita un tipo): 6.3.2.1p2, p3, p4, fn. sesenta y cinco; y 6.7.1 fn. 121.
ID de mensaje: <[email protected]>
Aquí está el hilo como se ve en groups.google.com.
ISO ha ratificado y publicado como ISO / IEC 9899: 2011 el nuevo estándar C11 (C1x) para el lenguaje de programación C. Los principales cambios con respecto al estándar anterior (C99), tal como está escrito en el artículo de C11 Wikipedia , son los siguientes:
El estándar incluye varios cambios al lenguaje C99 y las especificaciones de la biblioteca, tales como:
- Especificación de alineación (
_Alignas
specifier,_Alignof
operator,aligned_alloc
function,<stdalign.h>
header file)- El especificador de función
_Noreturn
Escriba expresiones genéricas usando la palabra clave
_Generic
. Por ejemplo, la siguiente macrocbrt(x)
traduce acbrtl(x)
,cbrt(x)
ocbrtf(x)
dependiendo del tipo dex
:
#define cbrt(X) _Generic((X), long double: cbrtl, / default: cbrt, / float: cbrtf)(X)
- Soporte multiproceso (
_Thread_local
especificador 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 subproceso, así como el_Atomic
tipo_Atomic
y<stdatomic.h>
para acceso a objetos ininterrumpidos )- Compatibilidad mejorada con Unicode basada en el Informe técnico de C Unicode ISO / IEC TR 19769: 2004 (tipos
char16_t
ychar32_t
para almacenar datos codificados UTF-16 / UTF-32, incluidas las funciones de conversión en<uchar.h>
y las cadenasu
yU
correspondientes prefijos literales, así como el prefijou8
para literales codificados en UTF-8).- La eliminación de la función get, desaprobada en la revisión estándar de 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 coma flotante, con respecto a los números de coma flotante subnormales y la cantidad de dígitos decimales que el tipo puede almacenar.
- Estructuras y uniones anónimas, útiles cuando se anidan uniones y estructuras, p. Ej. En
struct T { int tag; union { float x; int n; }; };
struct T { int tag; union { float x; int n; }; };
.#if
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"
) parafopen
. Esto se comporta comoO_CREAT|O_EXCL
en POSIX, que se usa comúnmente para archivos de bloqueo.- La función
quick_exit
funciona como una tercera forma de finalizar un programa, con la intención de realizar al menos una desinicialización mínima si falla la terminación con laexit
.- Macros para la construcción de valores complejos (en parte porque
real + imaginary*I
podría no dar el valor esperado si elimaginary
es infinito o NaN).
Desde el sitio ISO, puede comprar el estándar completo publicado . Aquí hay un resumen tomado del sitio ISO:
ISO / IEC 9899: 2011 especifica la forma y establece la interpretación de los programas escritos en el lenguaje de programación C. Especifica
- la representación de los programas C;
- la sintaxis y las restricciones del lenguaje C;
- las reglas semánticas para interpretar los programas C;
- la representación de los datos de entrada para ser procesados por los programas C;
- la representación de los datos de salida producidos por los programas C;
- las restricciones y los límites impuestos por una implementación conforme de C.
ISO / IEC 9899: 2011 no especifica
- el mecanismo por el cual los programas C se transforman para ser utilizados por un sistema de procesamiento de datos;
- el mecanismo por el cual los programas C son invocados para su uso por un sistema de procesamiento de datos;
- el mecanismo por el cual los datos de entrada se transforman para ser utilizados por un programa C;
- el mecanismo por el cual los datos de salida se transforman después de ser producidos por un programa C;
- el tamaño o la complejidad de un programa y sus datos que excederán la capacidad de cualquier sistema de procesamiento de datos específico o la capacidad de un procesador en particular;
- todos los requisitos mínimos de un sistema de procesamiento de datos que sea capaz de soportar una implementación conforme. ISO / IEC 9899: 2011 está diseñado para promover la portabilidad de los programas C entre una variedad de sistemas de procesamiento de datos. Está destinado a ser utilizado por implementadores y programadores.
Respondido por Jens Gustedt en los comentarios:
De acuerdo con un comentario de Larry Jones en comp.std.c no hubo cambios significativos de N1569 (que es N1570 sin marcadores de cambio). Lo único que queda sin resolver es el valor de
__STDC_VERSION__
, pero supongo que será más201112L
.