Good overviews of C11 standard:
- https://en.wikipedia.org/wiki/C11_(C_standard_revision)
- http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
- https://smartbear.com/blog/test-and-monitor/c11-a-new-c-standard-aiming-at-safer-programming/
The standard includes several changes to the C99 language and library specifications, such as:
- Alignment specification (
_Alignas
specifier, _Alignof
operator, aligned_alloc
function, <stdalign.h>
header file)
- The
_Noreturn
function specifier and the <stdnoreturn.h>
header file
Type-generic expressions using the _Generic
keyword. For example, the following macro cbrt(x)
translates to cbrtl(x)
, cbrt(x)
or cbrtf(x)
depending on the type of x
:
#define cbrt(x) _Generic((x), long double: cbrtl, \
default: cbrt, \
float: cbrtf)(x)
Multi-threading support (_Thread_local
storage-class specifier, <threads.h>
header including thread creation/management functions, mutex, condition variable and thread-specific storage functionality, as well as the _Atomic
type qualifier and <stdatomic.h>
for uninterruptible object access).
- Improved Unicode support based on the C Unicode Technical Report ISO/IEC TR 19769:2004 (
char16_t
and char32_t
types for storing UTF-16/UTF-32
encoded data, including conversion functions in <uchar.h>
and the corresponding u and U string literal prefixes, as well as the u8 prefix for UTF-8
encoded literals).
- Removal of the
gets
function, 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
#if
and #error
, when types are understood by the translator.
- An exclusive create-and-open mode (
"…x"
suffix) for open
. This behaves like O_CREAT|O_EXCL
in POSIX
, which is commonly used for lock files.
- The
quick_exit
function as a third way to terminate a program, intended to do at least minimal deinitialization if termination with exit
fails.
- Macros for the construction of complex values (partly because
real + imaginary*I
might not yield the expected value if imaginary
is infinite or NaN
).