C11 (C standard revision)

Last updated

C11 (previously C1X, formally 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] [3]

Contents

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]

Changes from C99

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

#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. [12] Programs can use predefined macros to determine whether an implementation supports a certain feature or not.

Optional features in C11
FeatureFeature test macroAvailability in C99 [13]
Analyzability (Annex L)__STDC_ANALYZABLE__Not available
Bounds-checking interfaces (Annex K)__STDC_LIB_EXT1__Not available
Multithreading (<threads.h>)__STDC_NO_THREADS__Not available
Atomic primitives and types (<stdatomic.h> and the _Atomic type qualifier) [14] __STDC_NO_ATOMICS__Not available
IEC 60559 floating-point arithmetic (Annex F)__STDC_IEC_559__Optional
IEC 60559 compatible complex arithmetic (Annex G)__STDC_IEC_559_COMPLEX__Optional
Complex types (<complex.h>)__STDC_NO_COMPLEX__Mandatory for hosted implementations
Variable-length arrays [15] __STDC_NO_VLA__Mandatory

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]

See also

Related Research Articles

ANSI C, ISO C, and Standard C are successive standards for the C programming language published by the American National Standards Institute (ANSI) and ISO/IEC JTC 1/SC 22/WG 14 of the International Organization for Standardization (ISO) and the International Electrotechnical Commission (IEC). Historically, the names referred specifically to the original and best-supported version of the standard. Software developers writing in C are encouraged to conform to the standards, as doing so helps portability between compilers.

C is a general-purpose programming language. It was created in the 1970s by Dennis Ritchie and remains very widely used and influential. By design, C's features cleanly reflect the capabilities of the targeted CPUs. It has found lasting use in operating systems code, device drivers, and protocol stacks, but its use in application software has been decreasing. C is commonly used on computer architectures that range from the largest supercomputers to the smallest microcontrollers and embedded systems.

<span class="mw-page-title-main">C++</span> General-purpose programming language

C++ is a high-level, general-purpose programming language created by Danish computer scientist Bjarne Stroustrup. First released in 1985 as an extension of the C programming language, it has since expanded significantly over time; as of 1997, C++ has object-oriented, generic, and functional features, in addition to facilities for low-level memory manipulation for systems like microcomputers or to make operating systems like Linux or Windows. It is usually implemented as a compiled language, and many vendors provide C++ compilers, including the Free Software Foundation, LLVM, Microsoft, Intel, Embarcadero, Oracle, and IBM.

The C preprocessor is the macro preprocessor for several computer programming languages, such as C, Objective-C, C++, and a variety of Fortran languages. The preprocessor provides inclusion of header files, macro expansions, conditional compilation, and line control.

The C standard library or libc is the standard library for the C programming language, as specified in the ISO C standard. Starting from the original ANSI C standard, it was developed at the same time as the C library POSIX specification, which is a superset of it. Since ANSI C was adopted by the International Organization for Standardization, the C standard library is also called the ISO C library.

errno.h is a header file in the standard library of the C programming language. It defines macros for reporting and retrieving error conditions using the symbol errno.

<span class="mw-page-title-main">C99</span> C programming language standard, 1999 revision

C99 is a past version of the C programming language open standard. It extends the previous version (C90) with new features for the language and the standard library, and helps implementations make better use of available computer hardware, such as IEEE 754-1985 floating-point arithmetic, and compiler technology. The C11 version of the C programming language standard, published in 2011, updates C99.

A variadic macro is a feature of some computer programming languages, especially the C preprocessor, whereby a macro may be declared to accept a varying number of arguments.

In the C programming language, data types constitute the semantics and characteristics of storage of data elements. They are expressed in the language syntax in form of declarations for memory locations or variables. Data types also determine the types of operations or methods of processing of data elements.

<span class="mw-page-title-main">Watcom C/C++</span>

Watcom C/C++ is an integrated development environment (IDE) product from Watcom International Corporation for the C, C++, and Fortran programming languages. Watcom C/C++ was a commercial product until it was discontinued, then released under the Sybase Open Watcom Public License as Open Watcom C/C++. It features tools for developing and debugging code for DOS, OS/2, Windows, and Linux operating systems, which are based upon 16-bit x86, 32-bit IA-32, or 64-bit x86-64 compatible processors.

C mathematical operations are a group of functions in the standard library of the C programming language implementing basic mathematical functions. All functions use floating-point numbers in one manner or another. Different C standards provide different, albeit backwards-compatible, sets of functions. Most of these functions are also available in the C++ standard library, though in different headers.

The C and C++ programming languages are closely related but have many significant differences. C++ began as a fork of an early, pre-standardized C, and was designed to be mostly source-and-link compatible with C compilers of the time. Due to this, development tools for the two languages are often integrated into a single product, with the programmer able to specify C or C++ as their source language.

assert.h is a header file in the C standard library. It defines the C preprocessor macro assert and implements runtime assertion in C.

C++11 is a version of the ISO/IEC 14882 standard for the C++ programming language. C++11 replaced the prior version of the C++ standard, called C++03, and was later replaced by C++14. The name follows the tradition of naming language versions by the publication year of the specification, though it was formerly named C++0x because it was expected to be published before 2010.

In computer programming, a variable-length array (VLA), also called variable-sized or runtime-sized, is an array data structure whose length is determined at runtime, instead of at compile time. In the language C, the VLA is said to have a variably modified data type that depends on a value.

The C programming language has a set of functions implementing operations on strings in its standard library. Various operations, such as copying, concatenation, tokenization and searching are supported. For character strings, the standard library uses the convention that strings are null-terminated: a string of n characters is represented as an array of n + 1 elements, the last of which is a "NUL character" with numeric value 0.

C++17 is a version of the ISO/IEC 14882 standard for the C++ programming language. C++17 replaced the prior version of the C++ standard, called C++14, and was later replaced by C++20.

C++20 is a version of the ISO/IEC 14882 standard for the C++ programming language. C++20 replaced the prior version of the C++ standard, called C++17, and was later replaced by C++23. The standard was technically finalized by WG21 at the meeting in Prague in February 2020, had its final draft version announced in March 2020, was approved on 4 September 2020, and published in December 2020.

C17, formally ISO/IEC 9899:2018, is an open standard for the C programming language, prepared in 2017 and published in June 2018. It replaced C11, and will be superseded by C23 when it is published in 2024. Since it was under development in 2017, and officially published in 2018, C17 is sometimes referred to as C18.

C23 is an open standard for the C programming language, which replaced C17. It was started in 2016 informally as C2x, and is expected to be published in 2024. The most recent publicly available working draft of C23 was released on April 1, 2023. The first WG14 meeting for the C2x draft was held in October 2019, virtual remote meetings were held in 2020 due to the COVID-19 pandemic, then various teleconference meetings continued to occur through 2024.

References

  1. "ISO/IEC 9899:2011 - Information technology -- Programming languages -- C". www.iso.org.
  2. "WG14 N1250 The C1X Charter" (PDF).
  3. "Subsetting the C Standard". www.open-std.org.
  4. WG14 N1570 Committee Draft — April 12, 2011
  5. "Defect report #411". ISO/IEC JTC1/SC22/WG14 - C. February 2012. Retrieved 2012-05-04.
  6. WG14 N1516 Committee Draft — October 4, 2010
  7. "Atomic operations library - cppreference.com". en.cppreference.com.
  8. "WG14 N1286 — "On Support for TR-19769 and New Character Types", Nick Stoughton, Larry Dwyer" (PDF).
  9. 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".
  10. "Abandoning a Process". www.open-std.org.
  11. "Creation of complex value". www.open-std.org.
  12. WG14 N1548 Committee Draft — December 2, 2010 6.10.8.3 Conditional feature macros
  13. ISO 9899:1999 6.10.8 Predefined macro names
  14. "WG14 N1558 Mar 14-18 meeting minutes (draft)" (PDF).
  15. ISO 9899:2011 Programming Languages - C 6.7.6.2 4
  16. "GCC 4.6 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF)". gcc.gnu.org.
  17. "Clang 3.1 Release Notes". llvm.org.
  18. "Support for ISO C11 added to IBM XL C/C++ compilers". www.ibm.com. 17 April 2014.
  19. "C11 and C17 Standard Support Arriving in MSVC". devblogs.microsoft.com. 14 September 2020.
  20. "N1969 — Updated Field Experience With Annex K — Bounds Checking Interfaces". www.open-std.org.
  21. Leffler, Jonathan. "c - Do you use the TR 24731 'safe' functions?". Stack Overflow.
  22. "c - Do you use the TR 24731 'safe' functions?". Stack Overflow.
  23. "Safer C Library - Open Watcom". 3 May 2015. Archived from the original on 2015-05-03.
  24. "safec: Safe C Library - README". rurban.github.io.

Further reading

Preceded by
C99
C language standards Succeeded by
C17