C1x has become ISO/IEC 9899:2011 aka C11.
Does anyone know what changes (if any) there are in the Standard from the April 2011 draft n1570?
ETA: There are t
ISO has ratified and published as ISO/IEC 9899:2011 the new C11 (C1x) standard for the C programming language. The major changes from the previous standard (C99), as written in the C11 Wikipedia article, are the following:
The standard includes several changes to the C99 language and library specifications, such as:
- Alignment specification (
_Alignasspecifier,_Alignofoperator,aligned_allocfunction,header file)- The
_Noreturnfunction specifierType-generic expressions using the
_Generickeyword. For example, the following macrocbrt(x)translates tocbrtl(x),cbrt(x)orcbrtf(x)depending on the type ofx:#define cbrt(X) _Generic((X), long double: cbrtl, \ default: cbrt, \ float: cbrtf)(X)- Multithreading support (
_Thread_localstorage-class specifier,header including thread creation/management functions, mutex, condition variable and thread-specific storage functionality, as well as the_Atomictype qualifier andfor uninterruptible object access).- Improved Unicode support based on the C Unicode Technical Report ISO/IEC TR 19769:2004 (
char16_tandchar32_ttypes for storing UTF-16/UTF-32 encoded data, including conversion functions inand the correspondinguandUstring literal prefixes, as well as theu8prefix for UTF-8 encoded literals).- Removal of the
getsfunction, deprecated in the previous C language standard revision, ISO/IEC 9899:1999/Cor.3:2007(E), in favor of a new safe alternative,gets_s.- Bounds-checking interfaces (Annex K).
- Analyzability features (Annex L).
- More macros for querying the characteristics of floating point types, concerning subnormal floating point numbers and the number of decimal digits the type is able to store.
- Anonymous structures and unions, useful when unions and structures are nested, e.g. in
struct T { int tag; union { float x; int n; }; };.- Static assertions, which are evaluated during translation at a later phase than
#ifand#error, when types are understood by the translator.- An exclusive create-and-open mode (
"…x"suffix) forfopen. This behaves likeO_CREAT|O_EXCLin POSIX, which is commonly used for lock files.- The
quick_exitfunction as a third way to terminate a program, intended to do at least minimal deinitializition if termination withexitfails.- Macros for the construction of complex values (partly because
real + imaginary*Imight not yield the expected value ifimaginaryis infinite or NaN).
From the ISO site you can buy the full published standard. Here is an abstract taken from the ISO site:
ISO/IEC 9899:2011 specifies the form and establishes the interpretation of programs written in the C programming language. It specifies
- the representation of C programs;
- the syntax and constraints of the C language;
- the semantic rules for interpreting C programs;
- the representation of input data to be processed by C programs;
- the representation of output data produced by C programs;
- the restrictions and limits imposed by a conforming implementation of C.
ISO/IEC 9899:2011 does not specify
- the mechanism by which C programs are transformed for use by a data-processing system;
- the mechanism by which C programs are invoked for use by a data-processing system;
- the mechanism by which input data are transformed for use by a C program;
- the mechanism by which output data are transformed after being produced by a C program;
- the size or complexity of a program and its data that will exceed the capacity of any specific data-processing system or the capacity of a particular processor;
- all minimal requirements of a data-processing system that is capable of supporting a conforming implementation. ISO/IEC 9899:2011 is designed to promote the portability of C programs among a variety of data-processing systems. It is intended for use by implementers and programmers.