Últimos cambios en C11


C1x se ha convertido en ISO/IEC 9899:2011, también conocido como C11.

¿Alguien sabe qué cambios (si los hay) hay en la Norma de la Abril 2011 borrador n1570?

ETA: Están las actas del Comité de Londres (marzo de 2011) (que deben incluirse en n1570) aquí, y de Washington, DC (octubre de 2011) aquí; Supongo que una lista de cambios aceptados en las actas de DC debería cubrir las cosas.

Author: Johan Bezem, 2011-12-25

3 answers

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 _Alignof operator, or the unary & operator, or is a string literal used to inicializar un array, una expresión que tiene el tipo "array of type " es convertido a una expresión con el tipo "puntero a tipo " que apunta al elemento inicial del objeto array y no es un lvalue.

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 publicado corrige este error y vuelve a la redacción de C99:

Excepto cuando es el operando del operador sizeof, o el unary & operador, or es un literal de cadena utilizado para inicializar una matriz, un expresión que tiene tipo " array de tipo" se convierte en un expresión con el tipo "puntero a tipo " que apunta a la inicial elemento del objeto array y no es un lvalue.

Más información: en una publicación reciente a comp.ETS.c sobre las diferencias entre N1570 y el estándar lanzado, Larry Jones, miembro del comité ISO C, escribió:

Hay un número de ellos, pero la mayoría son solo pequeños ajustes editoriales, cambios en el texto repetitivo, y barajando cosas alrededor para mantener la poderes que sean felices. El mayor cambio fue eliminar _Alignof de una montón de lugares que no debería haber sido añadido (basado en la errónea noción de que toma un tipo o una expresión como sizeof cuando realmente solo toma un tipo): 6.3.2. 1p2, p3, p4, fn. 65; y 6.7.1 fn. 121.

Message-ID: <[email protected]>

Aquí está el hilo como se ve en groups.google.com.

 11
Author: Keith Thompson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-05 20:05:17

Contestado por Jens Gustedt en los comentarios:

Según un comentario de Larry Jones en comp.ETS.c no hubo cambios significativos con respecto a N1569 (que es N1570 sin marcadores de cambio). Lo único que queda sin resolver es el valor de __STDC_VERSION__, pero supongo que lo más natural será 201112L.

 5
Author: J. C. Salomon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:59:55

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 Wikipedia C11, son los siguientes:

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

  • Especificación de alineación (_Alignas especificador, _Alignof operador, aligned_alloc función, <stdalign.h> archivo de encabezado)
  • El _Noreturn especificador de función
  • Type-expresiones genéricas que utilizan la palabra clave _Generic. Por ejemplo, la siguiente macro cbrt(x) se traduce en cbrtl(x), cbrt(x) o cbrtf(x) dependiendo del tipo de x:

        #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 subprocesos, así como el calificador de tipo _Atomic y <stdatomic.h> para objeto ininterrumpible acceso).
  • Soporte Unicode mejorado basado en el Informe Técnico de C Unicode ISO/IEC TR 19769:2004 (tiposchar16_t y char32_t para almacenar datos codificados UTF-16/UTF-32, incluyendo funciones de conversión en <uchar.h> y los correspondientes prefijos literales de cadena u y U, así como el prefijo u8 para literales codificados UTF-8).
  • Eliminación de la función gets, obsoleta en la revisión anterior del estándar de lenguaje C, ISO/IEC 9899:1999/Cor.3: 2007 (E), a favor de una nueva caja fuerte alternativa, gets_s.
  • Interfaces de verificación de límites (anexo K).
  • Características de analizabilidad (anexo L).
  • Más macros para consultar las características de los tipos de coma flotante, en relación con los números subnormales de coma flotante y el número de dígitos decimales que el tipo puede almacenar.
  • Anónimo estructuras y sindicatos, útil cuando los sindicatos y las estructuras anidadas, por ejemplo, en struct T { int tag; union { float x; int n; }; };.
  • Aserciones estáticas, que se evalúan durante la traducción en una fase posterior a #if y #error, cuando los tipos son entendidos por el traductor.
  • Un exclusivo modo de creación y apertura ("…x" sufijo) para fopen. Esto se comporta como O_CREAT|O_EXCL en POSIX, que se usa comúnmente para archivos de bloqueo.
  • El quick_exit funciona como una tercera forma de terminar un programa, con la intención de 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 {[32]]} podría no producir el valor esperado si imaginary es infinito o NaN).

Desde el sitio ISO se puede comprar el estándar completo publicado. He aquí un resumen tomado del sitio ISO:

ISO / IEC 9899: 2011 especifica la forma y establece la interpretación de 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 programas C;
  • la representación de los datos de entrada a procesar por los programas C;
  • la representación de los datos de salida producidos por los programas C;
  • las restricciones y límites impuestos por una implementación conforme de C.

La norma ISO / IEC 9899: 2011 no especifica{[37]]}

  • el mecanismo por el cual los programas C se transforman para su uso por un sistema de procesamiento de datos;
  • el mecanismo por el cual C los programas son invocados para su uso por un sistema de procesamiento de datos;
  • el mecanismo por el cual los datos de entrada se transforman para su uso 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 superará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 capaz de soportar una implementación conforme. ISO / IEC 9899: 2011 está diseñado para promover la portabilidad de programas C entre una variedad de sistemas de procesamiento de datos. Está diseñado para ser utilizado por implementadores y programadores.
 2
Author: Nisse Engström,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-28 01:33:53