Pregunta Últimos cambios en C11


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 de la Proyecto de abril de 2011 n1570?

ETA: están las minutas del Comité de Londres (marzo de 2011) (que deberían incluirse en n1570) aquíy desde Washington DC (octubre de 2011) aquí; Supongo que una lista de cambios aceptados en los minutos de DC debe cubrir las cosas.


32
2017-12-25 19:44


origen


Respuestas:


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 de sizeof operador, el _Alignof   operador, o el unario & operador, o es un literal de cadena utilizado para   inicializar una matriz, una expresión que tiene el tipo "matriz de tipo" es   convertido a una expresión con tipo "puntero a tipo"eso apunta   al elemento inicial del objeto de matriz y no es un valor l.

La inclusión de _Alignof fue un error, ya que la sintaxis de expresión unaria permisos

_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 de sizeof operador, o el   unario & operador, o es un literal de cadena usado para inicializar una matriz,   expresión que tiene tipo "matriz de tipo"se convierte en un   expresión con el tipo "puntero a tipo"eso apunta a la inicial   elemento 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 ajustes editoriales,   cambios en el texto repetitivo, y barajando las cosas para mantener el   poderes que sean felices El mayor cambio fue eliminar _Alignof de un   un montón de lugares no debería haber sido agregado (basado en la errónea   noción de que se necesita 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: <rfg33a-u0q.ln1@jones.homeip.net>

Aquí está la amenaza como se ve en groups.google.com.


11
2018-04-01 04:04



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 lo más natural será 201112L.


5
2018-01-06 17:16



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 C11 de 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 especificador, _Alignof operador, aligned_allocfunción, <stdalign.h> archivo de cabecera)
  • los _Noreturn especificador de funciones
  • Expresiones de tipo genérico usando el _Generic palabra clave. Por ejemplo, la siguiente macro cbrt(x) se traduce a 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 _Atomic tipo calificador 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 (char16_t y char32_t tipos para almacenar datos codificados UTF-16 / UTF-32, incluidas las funciones de conversión en <uchar.h> y el correspondiente u y U prefijos literales de cadena, así como el u8 prefijo para literales codificados en UTF-8).
  • Remoción de la gets función, obsoleta en la revisión estándar de lenguaje C previa, ISO / CEI 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.
  • Anónimo estructuras y sindicatos, útil cuando se anidan uniones y estructuras, p. 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 el traductor entiende los tipos.
  • Un exclusivo modo de crear y abrir ("…x" sufijo) para fopen. Esto se comporta como O_CREAT|O_EXCL en POSIX, que se usa comúnmente para archivos de bloqueo.
  • los quick_exit funcionar como una tercera forma de terminar un programa, con la intención de hacer al menos una mínima desinicialización si la terminación con exit falla
  • Macros para la construcción de valores complejos (en parte porque real + imaginary*I podría no dar el valor esperado si imaginary es infinito o NaN).

Desde el sitio ISO puede comprar el estándar publicado completo. 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.

2
2018-01-07 00:20