__STDC_VERSION__
is defined with value 201112L
to indicate that C11 support is available. Some features of C11 are supported by the GCC starting with version 4.6, Clang starting with version 3.1, IBM XL C starting with version 12.1, and Microsoft Visual C++ starting with VS 2019 (16.8) in September 2020.
Changes from C99
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)
* The _Noreturn
function specifier and the <stdnoreturn.h>
header
* 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
:
_Thread_local
storage-class specifier, <threads.h>
header including thread creation/management functions, mutex, condition variable and thread-specific storage functionality, as well as <stdatomic.h>
for atomic operations supporting the C11 memory model).
* Improved 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 gets
function (in favor of safer fgets
), which was deprecated in the previous C language standard revision, ISO/IEC 9899:1999/Cor.3:2007(E).
* 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 .
* 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 fopen
The C programming language provides many standard library functions for file input and output. These functions make up the bulk of the C standard library header . The functionality descends from a "portable I/O package" written by Mike Lesk ...
. 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.
* A new timespec_get
function and corresponding structure in <time.h>
with a degree of POSIX compatibility.
* Macros for the construction of complex values (partly because real + imaginary*I
might not yield the expected value if imaginary
is infinite or NaN).
Optional features
The new revision allows implementations to not support certain parts of the standard — including some that had been mandatory to support in the 1999 revision. Programs can use predefined macros to determine whether an implementation supports a certain feature or not.Criticism
The optional bounds-checking interfaces (Annex K) remain controversial and have not been widely implemented, and their deprecation or removal from the next standard revision has been proposed. Even Microsoft, a main proponent of this interface, does not conform to the definition. In addition, Annex K does not include the more useful TR24731-2 (dynamic allocation functions), such as and . The few open-source implementations include Open Watcom C/C++'s "Safer C" library and safeclib.See also
* C++20, C++17, C++14, C++11, C++03, C++98, versions of the C++ programming language standard * Compatibility of C and C++References
External links