C11 (C standard revision) explained

C11 (formerly C1X) is an informal name for ISO/IEC 9899:2011,[1] a past standard for the C programming language. It replaced C99 (standard ISO/IEC 9899:1999) and has been 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]

The final draft, N1570, 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.[3]

Changes from C99

The standard includes several changes to the C99 language and library specifications, such as

  1. define cbrt(x) _Generic((x), long double: cbrtl, \

default: cbrt, \ float: cbrtf)(x)

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.

Optional features in C11! Feature! Feature test macro! Availability in C99
Analyzability (Annex L)__STDC_ANALYZABLE__
Bounds-checking interfaces (Annex K)__STDC_LIB_EXT1__
Multithreading (<threads.h>) __STDC_NO_THREADS__
Atomic primitives and types (<stdatomic.h> and the _Atomic type qualifier)[7] __STDC_NO_ATOMICS__
IEC 60559 floating-point arithmetic (Annex F)__STDC_IEC_559__
IEC 60559 compatible complex arithmetic (Annex G)__STDC_IEC_559_COMPLEX__
Complex types (<complex.h>)__STDC_NO_COMPLEX__
Variable-length arrays[8] __STDC_NO_VLA__

Compiler support

Some features of C11 are supported by the GCC starting with version 4.6,[9] Clang starting with version 3.1,[10] IBM XL C starting with version 12.1,[11] and Microsoft Visual C++ starting with VS 2019 (16.8)[12] 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. Even Microsoft, a main proponent of this interface, does not conform to the definition.[13] In addition, Annex K does not include the more useful TR24731-2 (dynamic allocation functions), such as and .[14] The few open-source implementations include Open Watcom C/C++'s "Safer C" library[15] and safeclib.[16]

See also

Further reading

External links

Notes and References

  1. Web site: ISO/IEC 9899:2011 - Information technology -- Programming languages -- C. www.iso.org.
  2. Web site: Subsetting the C Standard. www.open-std.org.
  3. Web site: Defect report #411. February 2012. ISO/IEC JTC1/SC22/WG14 - C. 2012-05-04.
  4. Web site: Atomic operations library - cppreference.com. en.cppreference.com.
  5. Web site: Berin Babcock-McConnell. API02-C. Functions that read or write to or from an array should take an argument to specify the source or target size.
  6. Web site: Abandoning a Process. www.open-std.org.
  7. Web site: WG14 N1558 Mar 14-18 meeting minutes (draft).
  8. ISO 9899:2011 Programming Languages - C 6.7.6.2 4
  9. Web site: GCC 4.6 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF). gcc.gnu.org.
  10. Web site: Clang 3.1 Release Notes. llvm.org.
  11. Web site: Support for ISO C11 added to IBM XL C/C++ compilers. 17 April 2014. www.ibm.com.
  12. Web site: C11 and C17 Standard Support Arriving in MSVC. 14 September 2020. devblogs.microsoft.com.
  13. Web site: Leffler . Jonathan . c - Do you use the TR 24731 'safe' functions? . Stack Overflow.
  14. Web site: c - Do you use the TR 24731 'safe' functions? . Stack Overflow.
  15. Web site: Safer C Library - Open Watcom. 3 May 2015. https://web.archive.org/web/20150503192244/http://openwatcom.org/index.php/Safer_C_Library. 2015-05-03.
  16. Web site: safec: Safe C Library - README . rurban.github.io.