Top Qs
Timeline
Chat
Perspective
C11 (C standard revision)
C programming language standard, 2011 revision From Wikipedia, the free encyclopedia
Remove ads
C11 (previously C1X, formally ISO/IEC 9899:2011[1]) is a past standard for the C programming language. It replaced C99 (standard ISO/IEC 9899:1999) and was superseded by C17 (standard ISO/IEC 9899:2018). C11 mainly standardizes features already supported by common contemporary compilers, and includes a detailed memory model to better support multiple threads of execution. Due to delayed availability of conforming C99 implementations, C11 makes certain features optional, to make it easier to comply with the core language standard.[2][3]
The final draft, N1570,[4] was published in April 2011. The new standard passed its final draft review on October 10, 2011 and was officially ratified by ISO and published as ISO/IEC 9899:2011 on December 8, 2011, with no comments requiring resolution by participating national bodies.
A standard macro __STDC_VERSION__ is defined with value 201112L to indicate that C11 support is available.[5]
Remove ads
Changes from C99
Summarize
Perspective
The standard includes several changes to the C99 language and library specifications, such as[6]
- Alignment specification (
_Alignasspecifier,_Alignofoperator,aligned_allocfunction,<stdalign.h>header) - The
_Noreturnfunction specifier and the<stdnoreturn.h>header - Type-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)
- Multi-threading support (
_Thread_localstorage-class specifier,<threads.h>header including thread creation/management functions, mutex, condition variable and thread-specific storage functionality, as well as<stdatomic.h>[7] for atomic operations supporting the C11 memory model). - 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 in<uchar.h>and the correspondinguandUstring literal prefixes, as well as theu8prefix for UTF-8 encoded literals).[8] - Removal of the
getsfunction (in favor of saferfgets), which was deprecated in the previous C language standard revision, ISO/IEC 9899:1999/Cor.3:2007(E). - Bounds-checking interfaces (Annex K).[9]
- 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 MyStruct {
int tag;
union {
float x;
int n;
} un;
};
- 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 deinitialization.[10] - A new
timespec_getfunction and corresponding structure in<time.h>with a degree of POSIX compatibility. - Macros for the construction of complex values (partly because
real + imaginary*Imight not yield the expected value ifimaginaryis infinite or NaN).[11]
Remove ads
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.[12] Programs can use predefined macros to determine whether an implementation supports a certain feature or not.
Remove ads
Compiler support
Some features of C11 are supported by the GCC starting with version 4.6,[16] Clang starting with version 3.1,[17] IBM XL C starting with version 12.1,[18] and Microsoft Visual C++ starting with VS 2019 (16.8)[19] in September 2020.
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.[20] Even Microsoft, a main proponent of this interface, does not conform to the definition.[21] In addition, Annex K does not include the more useful TR24731-2 (dynamic allocation functions), such as vasprintf and open_memstream.[22] The few open-source implementations include Open Watcom C/C++'s "Safer C" library[23] and safeclib.[24]
Remove ads
See also
References
Further reading
External links
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads