World Library  
Flag as Inappropriate
Email this Article

C11 (C standard revision)

Article Id: WHEBN0023590441
Reproduction Date:

Title: C11 (C standard revision)  
Author: World Heritage Encyclopedia
Language: English
Subject: C programming language, Musl, Floating point, C (programming language), C++ programming language
Publisher: World Heritage Encyclopedia

C11 (C standard revision)

C11 (formerly C1X) is an informal name for ISO/IEC 9899:2011,[1] the current standard for the C programming language. It replaces the previous C standard, informally known as C99. This new version mainly standardizes features that have already been 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 from participating national bodies.

Some features of C11 are supported by the GCC starting with version 4.6,[5] Clang starting with version 3.1,[6] and IBM XL C starting with version 12.1.[7]

Changes from C99

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

  • Alignment specification (_Alignas specifier, _Alignof operator, aligned_alloc function, header file)
  • The _Noreturn function specifier
  • 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, header including thread creation/management functions, mutex, condition variable and thread-specific storage functionality, as well as the _Atomic type qualifier and 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 and the corresponding u and U string literal prefixes, as well as the u8 prefix for UTF-8 encoded literals).[9]
  • 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).[10]
  • 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 fopen. 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.[11]
  • Macros for the construction of complex values (partly because real + imaginary*I might not yield the expected value if imaginary is infinite or NaN).[12]

Version detection

A standard macro __STDC_VERSION__ is defined with value 201112L to indicate that C11 support is available.[13]

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.[14] 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[15]
Analyzability (Annex L) __STDC_ANALYZABLE__ Not available
Bounds-checking interfaces (Annex K) __STDC_LIB_EXT1__ Not available
Multithreading () __STDC_NO_THREADS__ Not available
Atomic primitives and types ( and the _Atomic type qualifier)[16] __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 () __STDC_NO_COMPLEX__ Mandatory for hosted implementations
Variable length arrays[17] __STDC_NO_VLA__ Mandatory

See also


  1. ^ ISO/IEC 9899:2011 - Information technology - Programming languages - C
  2. ^ WG14 N1250 The C1X Charter
  3. ^ WG14 N1460 Subsetting the C Standard
  4. ^ WG14 N1570 Committee Draft — April 12, 2011
  5. ^ GCC 4.6 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF)
  6. ^ Clang 3.1 Release Notes
  7. ^ Support for ISO C11 added to IBM XL C/C++ compilers
  8. ^ WG14 N1516 Committee Draft — October 4, 2010
  9. ^ WG14 N1286 — "On Support for TR-19769 and New Character Types", Nick Stoughton, Larry Dwyer
  10. ^ 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". 
  11. ^ WG14 N1327 Abandoning a Process
  12. ^ WG14 N1464 Creation of complex value
  13. ^ "Defect report #411". ISO/IEC JTC1/SC22/WG14 - C. February 2012. Retrieved 2012-05-04. 
  14. ^ WG14 N1548 Committee Draft — December 2, 2010 Conditional feature macros
  15. ^ ISO 9899:1999 6.10.8 Predefined macro names
  16. ^ WG14 N1558 Mar 14-18 meeting minutes (draft)
  17. ^ ISO 9899:2011 Programming Languages - C 4

External links

Preceded by
C language standards Most recent
This article was sourced from Creative Commons Attribution-ShareAlike License; additional terms may apply. World Heritage Encyclopedia content is assembled from numerous content providers, Open Access Publishing, and in compliance with The Fair Access to Science and Technology Research Act (FASTR), Wikimedia Foundation, Inc., Public Library of Science, The Encyclopedia of Life, Open Book Publishers (OBP), PubMed, U.S. National Library of Medicine, National Center for Biotechnology Information, U.S. National Library of Medicine, National Institutes of Health (NIH), U.S. Department of Health & Human Services, and, which sources content from all federal, state, local, tribal, and territorial government publication portals (.gov, .mil, .edu). Funding for and content contributors is made possible from the U.S. Congress, E-Government Act of 2002.
Crowd sourced content that is contributed to World Heritage Encyclopedia is peer reviewed and edited by our editorial staff to ensure quality scholarly research articles.
By using this site, you agree to the Terms of Use and Privacy Policy. World Heritage Encyclopedia™ is a registered trademark of the World Public Library Association, a non-profit organization.

Copyright © World Library Foundation. All rights reserved. eBooks from Project Gutenberg are sponsored by the World Library Foundation,
a 501c(4) Member's Support Non-Profit Organization, and is NOT affiliated with any governmental agency or department.